Python 从失败的rq作业获取异常消息
我正在运行一个使用rq和Python 从失败的rq作业获取异常消息,python,redis,queue,jobs,Python,Redis,Queue,Jobs,我正在运行一个使用rq和q.enqueue\u call(…)的作业,在这个作业中,我使用raiseexception('URL not found')引发一个异常 我想知道在作业失败后,如何从该作业(“未找到URL”)获取异常消息 我可以用计算机获取堆栈跟踪 print(获取队列失败(连接=conn)。作业[-1]。exc\u信息) 虽然似乎无法获取短错误消息本身 我认为job.result(在使用job=job.fetch(job\u key,connection=conn)获取作业后)可
q.enqueue\u call(…)
的作业,在这个作业中,我使用raiseexception('URL not found')
引发一个异常
我想知道在作业失败后,如何从该作业(“未找到URL”)获取异常消息
我可以用计算机获取堆栈跟踪
print(获取队列失败(连接=conn)。作业[-1]。exc\u信息)
虽然似乎无法获取短错误消息本身
我认为
job.result
(在使用job=job.fetch(job\u key,connection=conn)
获取作业后)可以工作,尽管它返回None
,但据我所知,您不能只获得最后一条错误消息:您可以获得堆栈跟踪或函数返回的值。从文件中:
Python函数可能有返回值,因此作业也可以有返回值。如果作业返回一个非None返回值,则工作者将把该返回值写回作业的Redis散列结果键下。默认情况下,作业完成后,作业的Redis哈希本身将在500秒后过期
exc_信息包含以下内容:
当在作业中引发异常时,工作进程将捕获该异常,并将其序列化并存储在作业的Redis哈希的exc_info键下。对作业的引用放在失败队列上
我发现获取错误消息的最佳方法是获取exc_信息并对其进行解析(通常是在raise
或类似的情况下),然后从拆分中获取最后一个值。类似于此的内容将返回引发的最后一个错误:
job.\uuuu dict\uuuuu[“exc\u info”]。拆分(“加薪”)[-1]
这可能会有所帮助
$ redis-cli
> hget rq:job:name exc_info
"x\x9c\r..."
$ python
> import zlib
> zlib.decompress("x\x9c\r...")