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

Jua*_*oto 7 python queue task-queue redis python-rq

试图找到一种捕获RQ作业超时的好方法,因此可以在超时后重新排队.

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

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

Eli*_*Eli 4

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

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

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

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

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

  • 谢谢!这是对的。为了将来参考,作业会引发一个“JobTimeoutException”,它可以由工作异常处理程序处理,但您可以选择定义它。 (2认同)