[英]Obtaining exception message from failed rq job
我正在使用帶有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
據我所知,你不能只得到最后一條錯誤消息:你可以得到堆棧跟蹤,或者函數返回的值。 從這里的文檔:
Python 函數可能有返回值,所以作業也可以有它們。 如果作業返回非 None 返回值,則工作程序會將返回值寫回到作業的 Redis 哈希結果鍵下。 作業完成后,作業的 Redis 散列默認會在 500 秒后過期。
exc_info 包含以下內容:
當作業中拋出異常時,它會被工作人員捕獲,序列化並存儲在作業的 Redis 哈希的 exc_info 鍵下。 對作業的引用放在失敗的隊列中。
我發現獲得錯誤消息的最好方法是獲取 exc_info 並解析它 - 通常是在raise
或類似的事情上 - 然后從拆分中獲取最后一個值。 類似這樣的事情會返回上一個引發的錯誤:
job.__dict__["exc_info"].split("raise")[-1]
這可能有幫助
$ redis-cli
> hget rq:job:name exc_info
"x\x9c\r..."
$ python
> import zlib
> zlib.decompress("x\x9c\r...")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.