我有一个在 Python 中的 Heroku 上运行的网站,我有一个工作人员作为后台进程来处理我不想阻止网页传递的任务,因此不适合web
dynos。为此,我使用rq
和 redis 设置了一个队列。
在我的过程中,有时可能会出现自定义异常。对于其中的特定子集,我不想让作业直接进入“失败”队列,而是要重新排队几次。我一直在查看主页上的异常处理程序页面rq
,但我不清楚一些事情。特别是,它描述了以下编写异常处理程序的方法:
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
?