【问题标题】:Celery apply_async get get called multiple timesCelery apply_async 被多次调用
【发布时间】:2019-05-15 18:35:40
【问题描述】:

我创建了一个任务

@app.task(bind=True, max_retries=1)
def notify_feedback(self, req_id):
    #some things

我已经从我的角度调用了这个任务,延迟了 1 小时,比如

later = datetime.datetime.utcnow() + datetime.timedelta(hours=1)
notify_feedback.apply_async((req_id,), eta=later)

当我检查飞行中的 SQS 消息时,它有 1 个待处理的计数 一小时后,这个notify_feedback 被多次调用。有人遇到过这种芹菜问题吗?

celery- 使用的是 4.1.0

【问题讨论】:

  • 您的芹菜中是否有超过 1 个工人?
  • 是 3 个工作人员,但该函数被调用了大约 10 到 15 次
  • 我和 2 名工人有这样的问题。请在下面查看我的解决方案。
  • 你用的是哪个时区的芹菜?
  • 使用 UTC 时区

标签: python django celery amazon-sqs


【解决方案1】:

我也遇到过这样的问题,但我已经延迟了超过 1 小时的任务。

当我在 settings.py 中设置时,我解决了我的问题。

BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 86400}

可见性超时定义在将消息重新传递给另一个工作人员之前等待工作人员确认任务的秒数。

更多详情there.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2013-11-23
    • 2012-01-17
    • 1970-01-01
    • 2020-06-08
    • 2010-10-24
    相关资源
    最近更新 更多