【发布时间】:2012-09-28 06:04:01
【问题描述】:
我有一个用 Python 在 Heroku 上运行的网站,我有一个工作人员作为后台进程来处理我不想阻止网页传递的任务,因此不适合 web dynos。为此,我使用 rq 和 redis 设置了一个队列。
在我的过程中,有时可能会出现自定义异常。对于其中的特定子集,我不想让作业直接进入“失败”队列,而是要重新排队几次。我一直在看rq 主页上的exception handlers page,但有些事情我不清楚。具体来说,它描述了以下编写异常处理程序的方法:
def my_handler(job, exc_type, exc_value, traceback):
# do custom things here
# for example, write the exception info to a DB
...
现在,我打算按照以下方式做一些事情:
from rq import requeue_job
def my_handler(job, exc_type, exc_value, traceback):
if exec_type == "MyCustomError":
job.meta['MyErrorCount'] += 1
job.save()
if job.meta['MyErrorCount'] >= 10:
return True
else:
requeue_job(job.id)
return False
问题:
-
exc_type、exc_value和traceback是哪些类型的对象? (例如,if exec_type == "MyCustomError"行完全正确吗?) - 我的错误处理程序是否会有效地检测它是否是一个特定的错误,将这些作业重新排队,直到它失败 10 次,然后让它落到
failed?是否还会让所有其他错误归于failed?
【问题讨论】:
-
不,这不是真正的代码,它是 SO 的净化和简化版本。如果您指出该行完全不正确,那么这正是我发布此问题的原因。