Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从失败的rq作业获取异常消息_Python_Redis_Queue_Jobs - Fatal编程技术网

Python 从失败的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)获取作业后)可

我正在运行一个使用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)
获取作业后)可以工作,尽管它返回
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...")