gpt4 book ai didi

python - Celery 由于预取而执行多任务

转载 作者:太空宇宙 更新时间:2023-11-03 14:16:12 27 4
gpt4 key购买 nike

看来 Celery (v4.1) 可以与一些任务预取一起使用,或者与 CELERY_ACKS_LATE=True 一起使用。 (已讨论here)
我们目前与 CELERY_ACKS_LATE=False 合作和CELERYD_PREFETCH_MULTIPLIER=1

在这两种情况下,Rabbit 中都有未确认的消息。
有时我们会遇到网络问题,导致 Celery 与 Rabbit 失去连接几秒钟,并收到以下警告:consumer: Connection to broker lost. Trying to re-establish the connection...
当这种情况发生时,未确认的消息将返回Ready ,这似乎是标准行为,并且正在被另一个消费者消费。
这会导致任务的多次执行,因为消费者在工作进程中启动了预取任务,但无法将其确认给 Rabbit。

在没有外部工具的情况下,似乎不可能保证 Celery 中的任务准确执行一次,那么如何确保任务最多执行一次

-----编辑----

我正在考虑的一种方法是使用任务的 self.request.delivery_info['redelivered']并失败 redelivered 的任务.
在实现“最多执行一次”的目标的同时,这会产生很高的误报率(尚未执行的任务)

最佳答案

任务执行一次和多次执行任务之间存在额外的副作用,即。如果您的任务不是幂等的,那么执行两次相同的任务将导致错误。

我的建议是允许任务执行多次,但使它们具有幂等性,这样如果它们已经执行了,它们就没有任何作用。

关于python - Celery 由于预取而执行多任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48225295/

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