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

问题描述 投票:3回答:1

我正在使用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

python redis queue jobs
1个回答
0
投票

据我所知,你不能只得到最后一条错误信息:你可以得到堆栈跟踪,或者函数返回的值。从文档here

Python函数可能有返回值,因此作业也可以拥有它们。如果作业返回非None返回值,则worker将该返回值写回结果键下的作业的Redis哈希值。作业完成后,作业的Redis哈希本身将在500秒后失效。

exc_info包含以下内容:

当在作业中抛出异常时,它会被工作者捕获,序列化并存储在作业的Redis散列的exc_info键下。对作业的引用将放在失败的队列中。

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

job.__dict__["exc_info"].split("raise")[-1]
© www.soinside.com 2019 - 2024. All rights reserved.