重新启动Celery会导致任务重复吗?

3

我在celery中设置了一个距离今天10天的eta邮件任务,然而,我发现有些人会同时收到 5-6封重复的电子邮件。之前我也遇到过这个问题,当时是BROKER_TRANSPORT_OPTIONS设置太低引起的。现在我的设置文件中有以下内容:

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

所以这应该不再是一个问题。我只是想知道是否还有其他可能引起它的原因,例如重新启动celery。每次部署新代码时都会重启celery,这可能会发生5次或更多次,所以这是我能想到的唯一原因。

你有什么想法吗?

谢谢。


你使用哪个经纪人,能看到排队的任务吗? - AndrewS
@AndrewS 我正在使用 Redis。是的,我可以看到任务已排队。列表非常长,所以仅凭肉眼观察很难发现是否存在任何问题。 - Ross Lote
2个回答

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

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

2
如果设置了CELERY_ACKS_LATE = False,则在工作人员停止不正确的情况下,任务将不会重新启动。在这种情况下,任务在消耗后立即标记为已确认。请参见docs
还要确保您的任务没有启用retry。如果任务内部发生任何异常,它们可能会使用相同的输入参数重试。
另一个可能的情况是,您的任务编写有误,每次运行都选择相同的接收者集。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接