8

试图找到一种捕捉RQ作业超时的好方法,以便在超时后重新排队。

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

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

4

1 回答 1

4

听起来您想使用异常处理。从文档:

由于发生异常,作业可能会失败。当您的 RQ 工作人员在后台运行时,您如何收到这些异常的通知?

默认值:失败队列 RQ 的默认安全网是失败队列。每个执行失败的作业连同其异常信息(类型、值、回溯)都存储在这里。虽然这可以确保没有失败的作业“丢失”,但这对于主动获得有关作业失败的通知是没有用的。

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

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

于 2013-09-06T09:42:17.110 回答