代码之家  ›  专栏  ›  技术社区  ›  Madeleine Smith

从失败的RQ作业获取异常消息

  •  2
  • Madeleine Smith  · 技术社区  · 6 年前

    我在用RQ管理一个工作 q.enqueue_call(...) 在这份工作中,我提出了一个例外 raise Exception('URL not found')

    我想知道在作业失败后,如何从该作业中获取异常消息(“找不到URL”)。

    我可以用

    print(get_failed_queue(connection=conn).jobs[-1].exc_info)

    虽然似乎不能得到短的错误信息本身。

    我想 job.result (在得到工作之后 job = Job.fetch(job_key, connection=conn) )尽管这会奏效的 None

    0 回复  |  直到 6 年前
        1
  •  1
  •   OrionTheHunter    6 年前

    据我所知,您不能只得到最后一条错误消息:您要么得到堆栈跟踪,要么得到函数返回的值。从文档中 here :

    python函数可能有返回值,所以作业也可以有返回值。如果一个作业返回一个非无返回值,那么工人将把该返回值写回到结果键下的作业redis散列中。作业的redis散列本身将在作业完成后的500秒后默认过期。

    exc_信息包含以下内容:

    当一个异常被抛出到一个作业中时,它会被工作进程捕获,被序列化并存储在jobs redis hash exc_info键下。对作业的引用被放入失败的队列中。

    我发现获取错误消息的最佳方法是获取exc_信息并对其进行分析-通常在 raise 或者类似的-然后从分割中得到最后一个值。类似这样的操作返回上次引发的错误:

    job.__dict__["exc_info"].split("raise")[-1]