【发布时间】:2016-09-28 15:30:44
【问题描述】:
几天后,我的 celery 服务将无限期地重复执行一项任务。这有点难以重现,但每周定期发生一次或更频繁,具体取决于正在处理的任务量。
我将不胜感激有关如何获取有关此问题的更多数据的任何提示,因为我不知道如何跟踪它。出现这种情况,重启 celery 会暂时解决。
我有一个 celery 节点和 4 名工人一起运行(版本 3.1.23)。代理和结果后端位于 Redis 上。我只发布到一个队列,我不使用 celery beat。
Django的setting.py中的配置是:
BROKER_URL = 'redis://localhost:6380'
CELERY_RESULT_BACKEND = 'redis://localhost:6380'
日志的相关部分:
[2016-05-28 10:37:21,957: INFO/MainProcess] Received task: painel.tasks.indicar_cliente[defc87bc-5dd5-4857-9e45-d2a43aeb2647]
[2016-05-28 11:37:58,005: INFO/MainProcess] Received task: painel.tasks.indicar_cliente[defc87bc-5dd5-4857-9e45-d2a43aeb2647]
[2016-05-28 13:37:59,147: INFO/MainProcess] Received task: painel.tasks.indicar_cliente[defc87bc-5dd5-4857-9e45-d2a43aeb2647]
...
[2016-05-30 09:27:47,136: INFO/MainProcess] Task painel.tasks.indicar_cliente[defc87bc-5dd5-4857-9e45-d2a43aeb2647] succeeded in 53.33468166703824s: None
[2016-05-30 09:43:08,317: INFO/MainProcess] Task painel.tasks.indicar_cliente[defc87bc-5dd5-4857-9e45-d2a43aeb2647] succeeded in 466.0324719119817s: None
[2016-05-30 09:57:25,550: INFO/MainProcess] Task painel.tasks.indicar_cliente[defc87bc-5dd5-4857-9e45-d2a43aeb2647] succeeded in 642.7634702899959s: None
任务由用户请求发送:
tasks.indicar_cliente.delay(indicacao_db.id)
这是source code of the task 和celery service configuration。
为什么在服务运行一段时间后多次收到任务?如何获得一致的行为?
【问题讨论】:
-
谁在调度任务?用户触发了吗? cron触发?你正在使用芹菜节拍。只发布到一个队列?粘贴你的 celery 配置
-
@MauroRocco 任务由用户请求发送(未安排,我不使用 celery beat)。我只发布到一个队列。我已经更新了我的问题以包含 celery 配置和任务源代码。
-
嗨,你是说如果你在本地运行它并且只安排一个任务,你会看到 3 个任务正在执行?因为如果这是用户触发的,那么为每个请求它的用户安排一个任务是正常的。
-
@MauroRocco 任务通常会遵循所需的行为。然而,在服务运行几天后,任务被多次接收(在短时间内超过 100 次)。用户似乎没有触发任务,因为他们收到相同的任务 ID(如果用户正在请求新任务,日志将显示不同的 ID)
-
你能贴出安排任务的代码吗?
标签: python celery celery-task