【问题标题】:How to correctly catch and process RQ timeouts in Python?如何在 Python 中正确捕获和处理 RQ 超时?
【发布时间】:2013-09-09 18:40:31
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    听起来你想使用exception handling。来自文档:

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

    默认:失败队列 RQ 的默认安全网是失败的队列 队列。每个执行失败的作业都存储在这里,以及 其异常信息(类型、值、回溯)。虽然这使得 确保没有失败的工作“迷路”,这对得到通知是没有用的 主动应对工作失败。

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

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

    【讨论】:

    • 谢谢!这是对的。为了将来参考,该作业会引发一个JobTimeoutException,它可以由工作异常处理程序处理,但是您可以选择定义它。
    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 2018-05-27
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多