【问题标题】:Does restarting celery cause duplicate tasks?重新启动芹菜会导致重复任务吗?
【发布时间】:2016-06-22 23:35:41
【问题描述】:

我有一个 celery 中的电子邮件任务,从现在起 10 天()。但是,我发现有些人一次收到 5-6 封重复的电子邮件。我之前遇到过这个问题,因为 BROKER_TRANSPORT_OPTIONS 设置得太低了。现在我的设置文件中有这个:

BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 2592000} #30 days

所以这应该不再是问题了。我只是想知道是否还有其他可能导致它的原因。即重新启动芹菜。每次我部署新代码时 Celery 都会重新启动,并且每周可能会发生 5 次或更多次,所以这是我唯一能想到的。

有什么想法吗?

谢谢。

【问题讨论】:

  • 您使用的是哪个代理,您能看到排队的任务吗?
  • @AndrewS 我正在使用 redis。是的,我可以看到排队的任务。清单很长,光看很难看出有没有问题。

标签: python django redis celery django-celery


【解决方案1】:

如果工作进程/节拍进程未正确停止,则可能会重复任务。你如何重新启动芹菜工人/节拍?检查服务器是否有僵尸芹菜工人和节拍进程。尝试停止所有 celery 进程,检查不存在 celery 进程并重新启动它。毕竟检查ps ax | grep celery 显示新工人并且只有一个节拍。

【讨论】:

  • 我在 supervisord 下运行 celery。我使用的命令是 supervisorctl restart celery。谢谢,我稍后再看看。
  • 所以我刚刚检查过了。只有一个进程在运行。另外,supervisord 启动脚本是这样的:/envs/flavourly/bin/python /envs/flavourly/bin/celery --app=flavourly.celery:app worker -P gevent --concurrency=10 --loglevel=INFO
【解决方案2】:

如果您设置CELERY_ACKS_LATE = False,则在不正确的工人停止的情况下任务将不会重新启动。在这种情况下,任务在消费后立即标记为已确认。见docs

还要确保您的任务没有启用retry。如果任务内部发生任何异常 - 他们可能会使用相同的输入参数重试。

另一种可能的情况 - 你的任务写错了,每次运行都选择相同的收件人集。

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2013-01-12
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多