【发布时间】:2013-09-09 18:40:31
【问题描述】:
试图找到一种捕捉RQ 作业超时的好方法,以便在超时后重新排队。
基本上,正确的解决方案将提供一种方法(例如,worker 中的异常处理程序或类似的东西)来重新排队超时的作业。此外,如果作业返回到failed 队列,这也是一个很好的答案。
非常感谢!任何帮助将不胜感激!
【问题讨论】:
标签: python redis queue task-queue python-rq
试图找到一种捕捉RQ 作业超时的好方法,以便在超时后重新排队。
基本上,正确的解决方案将提供一种方法(例如,worker 中的异常处理程序或类似的东西)来重新排队超时的作业。此外,如果作业返回到failed 队列,这也是一个很好的答案。
非常感谢!任何帮助将不胜感激!
【问题讨论】:
标签: python redis queue task-queue python-rq
听起来你想使用exception handling。来自文档:
作业可能会因发生异常而失败。当您的 RQ 工作人员运行时 背景,你如何得到这些异常的通知?
默认:失败队列 RQ 的默认安全网是失败的队列 队列。每个执行失败的作业都存储在这里,以及 其异常信息(类型、值、回溯)。虽然这使得 确保没有失败的工作“迷路”,这对得到通知是没有用的 主动应对工作失败。
自定义异常处理程序 从 0.3.1 版本开始,RQ 支持 注册自定义异常处理程序。这使得可以 替换默认行为(将作业发送到失败队列) 完全一致,或在发生异常时采取额外措施。
您还可以将作业存储在 redis 排序集中,其中 job_id 作为键,time.time() + timeout 作为分数,然后让工作人员运行 ZRANGEBYSCORE sorted_set 0 [current_time] 并处理作为超时作业返回的任何内容。
【讨论】:
JobTimeoutException,它可以由工作异常处理程序处理,但是您可以选择定义它。