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

时间:2018-10-07 21:29:00

标签: python redis queue jobs

我正在使用q.enqueue_call(...)上的rq运行作业,在此作业中,我使用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

2 个答案:

答案 0 :(得分:0)

据我所知,您不能仅获得最后一条错误消息:您可以获取堆栈跟踪或该函数返回的值。从文档here

  

Python函数可能具有返回值,因此作业也可以具有它们。如果作业返回的返回值为非None,则工作人员会将返回值写回到作业的Redis哈希在结果键下。作业完成后,默认情况下,该作业的Redis哈希值本身将在500秒后过期。

exc_info包含以下内容:

  

当作业中引发异常时,该异常会被工人捕获,序列化并存储在作业的Redis哈希的exc_info键下。对该作业的引用被放在失败的队列中。

我发现错误消息的最好方法是获取exc_info并解析它-通常在raise或类似的东西上-然后从拆分中获取最后一个值。这样的事情会返回上一次引发的错误:

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

答案 1 :(得分:0)

这可能有帮助

$ redis-cli
> hget rq:job:name exc_info
"x\x9c\r..."
$ python
> import zlib
> zlib.decompress("x\x9c\r...")