我们在 WSGI 应用程序中使用RQ。我们所做的是在运行任务的不同后端服务器中有几个不同的进程,连接到(可能)几个不同的任务服务器。为了更好地配置这个设置,我们在系统中使用了一个自定义管理层,它负责运行工作人员、设置任务队列等。
当作业失败时,我们希望实现重试,在延迟增加后重试作业几次,最终要么完成它,要么让它失败并在我们的日志系统中记录一个错误条目。但是,我不确定应该如何实施。我已经创建了一个自定义工作脚本,它允许我们将错误记录到我们的数据库中,我第一次重试的尝试是这样的:
# This handler would ideally wait some time, then requeue the job.
def worker_retry_handler(job, exc_type, exc_value, tb):
print 'Doing retry handler.'
current_retry = job.meta[attr.retry] or 2
if current_retry >= 129600:
log_error_message('Job catastrophic failure.', ...)
else:
current_retry *= 2
log_retry_notification(current_retry)
job.meta[attr.retry] = current_retry
job.save()
time.sleep(current_retry)
job.perform()
return False
正如我所提到的,我们在工作文件中也有一个函数,它可以正确解析它应该连接的服务器,并可以发布作业。问题不一定是如何发布作业,而是如何处理您在异常处理程序中获得的作业实例。
任何帮助将不胜感激。如果有关于更好的方法的建议或指示,这也很好。谢谢!