簡體   English   中英

從失敗的 rq 作業中獲取異常消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM