gpt4 book ai didi

python - 超时后,Celery 没有将任务放回 RabbitMQ 队列

转载 作者:太空狗 更新时间:2023-10-30 00:13:57 24 4
gpt4 key购买 nike

我在 Heroku 上运行 Celery worker,其中一项任务达到了超时限制。当我手动重试时,一切正常,所以这可能是连接问题。我使用 RabbitMQ 作为代理,Celery 配置为延迟确认任务 (CELERY_ACKS_LATE=True)。我希望任务返回到 RabbitMQ 队列并由另一个工作人员再次处理,但它没有发生。当 worker 超时时,您是否需要配置任何其他内容以使任务返回到 RabbitMQ 队列?

这是日志:

Traceback (most recent call last): 
File "/app/.heroku/python/lib/python3.4/site-packages/billiard/pool.py", line 639, in on_hard_timeout
raise TimeLimitExceeded(job._timeout)
billiard.exceptions.TimeLimitExceeded: TimeLimitExceeded(60,)
[2015-09-02 06:22:14,504: ERROR/MainProcess] Hard time limit (60s) exceeded for simulator.tasks.run_simulations[4e269d24-87a5-4038-b5b5-bc4252c17cbb]
[2015-09-02 06:22:18,877: INFO/MainProcess] missed heartbeat from celery@420cc07b-f5ba-4226-91c9-84a949974daa
[2015-09-02 06:22:18,922: ERROR/MainProcess] Process 'Worker-1' pid:9 exited with 'signal 9 (SIGKILL)'

最佳答案

看起来您正在达到 Celery 时间限制。 http://docs.celeryproject.org/en/latest/userguide/workers.html#time-limits

默认情况下,Celery 不会为任务实现重试逻辑,因为它不知道重试对您的任务是否安全。也就是说,您的任务需要幂等才能保证重试的安全。

因此,任何由于任务失败而导致的重试都应该在任务中进行。请参阅此处的示例:http://docs.celeryproject.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.retry

任务超时的原因有很多,但您最清楚。任务可能已经超时,因为处理数据的时间太长,或者因为获取数据的时间太长。

如果您认为任务无法尝试连接到某些服务,我建议减少连接超时间隔并在您的任务中添加重试逻辑。如果您的任务处理数据的时间太长,请尝试将数据分成 block 并以这种方式处理。 Celery 对此有很好的支持:http://docs.celeryproject.org/en/latest/userguide/canvas.html#chunks

关于python - 超时后,Celery 没有将任务放回 RabbitMQ 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32384682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com