尝试找到捕获RQ作业超时的好方法,以便在超时后重新排队。
基本上,正确的解决方案将提供一种方法(例如,工作者中的异常处理程序或类似的东西)来重新排队超时的作业。此外,如果作业返回failed
队列,那也是一个很好的答案。
非常感谢!任何帮助将不胜感激!
答案 0 :(得分:3)
听起来好像要使用exception handling。来自文档:
由于发生异常,作业可能会失败。当您的RQ工作人员进入时 背景,你如何得到这些例外的通知?
默认值:失败的队列RQ的默认安全网是失败的 队列。每个执行失败的作业都会存储在此处 它的异常信息(类型,值,回溯)。虽然这样做 确保没有失败的工作“迷路”,这是没有用的通知 积极主动地解决工作失败问题。
自定义异常处理程序从版本0.3.1开始,RQ支持 注册自定义异常处理程序。这使得它成为可能 替换默认行为(将作业发送到失败的队列) 完全,或在发生异常时采取额外步骤。
您还可以将作业存储在redis排序集中,其中job_id为关键字,time.time() + timeout
为分数,然后让工作人员运行ZRANGEBYSCORE sorted_set 0 [current_time]
并处理作为超时作业返回的任何内容。