【问题标题】:When the Celery Beat send one due task, Why the MainProcess Received three different task?当 Celery Beat 发送一个到期任务时,为什么 MainProcess 收到了三个不同的任务?
【发布时间】:2021-03-26 23:11:39
【问题描述】:

Python 3.6.5 芹菜 v4.2.1, 当 Celery Beat 发送一次到期任务时,MainProcess 收到三个任务如何解决? 芹菜节拍时间表:

CELERYBEAT_SCHEDULE = {
    'stats-every-midnight': {
        'task': 'tasks.stats.stats',
        'schedule': crontab(minute=0, hour=0)
    }
}

日志:

[2020-12-15 00:00:00,079: INFO/Beat] Scheduler: Sending due task stats-every-midnight (tasks.stats.stats)
[2020-12-15 00:00:00,084: INFO/MainProcess] Received task: tasks.stats.stats[cc9206a0-228d-4eeb-8e04-1137209beb7c]  
[2020-12-15 00:00:00,098: INFO/MainProcess] Received task: tasks.stats.stats[46f448f1-41d1-4cad-803e-89b3f25bcf11]  
[2020-12-15 00:00:00,102: INFO/MainProcess] Received task: tasks.stats.stats[54ef61ef-5f2e-49ea-b7af-84da8e12ee47]  

【问题讨论】:

    标签: python celery


    【解决方案1】:

    如果您有 3 个 Celery 工作人员,则可能会发生这种情况,所有工作人员都以 celery -A <app> worker -B ... 之类的东西开始 - 它基本上启动了 3 个单独的调度程序。人们经常犯这个错误...建议:不要在嵌入节拍过程的情况下启动您的 Celery 工作人员(-B 选项)。此选项已添加到 Celery 中以简化开发。它从未打算用于生产。

    【讨论】:

    • 谢谢。事实上,我打开了三个 celery worker 进程。
    • 问题不在于工作人员...问题是您也启动了嵌入式调度程序。
    • 我已经阅读了link,知道不要在嵌入节拍进程的情况下启动你的 Celery 工作人员(-B 选项),但我不明白为什么不允许。
    • 多个 (N) Celery beat 进程正在运行意味着您将有 N 个重复的任务,因为所有 N 个任务都会触发任务,因为他们不知道还有其他调度程序......
    猜你喜欢
    • 2020-04-05
    • 2023-01-10
    • 2022-01-22
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多