如何在Python中正确捕获和处理RQ超时?

时间:2013-09-05 19:44:04

标签: python redis queue task-queue python-rq

尝试找到捕获RQ作业超时的好方法,以便在超时后重新排队。

基本上,正确的解决方案将提供一种方法(例如,工作者中的异常处理程序或类似的东西)来重新排队超时的作业。此外,如果作业返回failed队列,那也是一个很好的答案。

非常感谢!任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

听起来好像要使用exception handling。来自文档:

  

由于发生异常,作业可能会失败。当您的RQ工作人员进入时   背景,你如何得到这些例外的通知?

     

默认值:失败的队列RQ的默认安全网是失败的   队列。每个执行失败的作业都会存储在此处   它的异常信息(类型,值,回溯)。虽然这样做   确保没有失败的工作“迷路”,这是没有用的通知   积极主动地解决工作失败问题。

     

自定义异常处理程序从版本0.3.1开始,RQ支持   注册自定义异常处理程序。这使得它成为可能   替换默认行为(将作业发送到失败的队列)   完全,或在发生异常时采取额外步骤。

您还可以将作业存储在redis排序集中,其中job_id为关键字,time.time() + timeout为分数,然后让工作人员运行ZRANGEBYSCORE sorted_set 0 [current_time]并处理作为超时作业返回的任何内容。