当 Celery Beat 发送一个到期任务时,为什么 MainProcess 收到三个不同的任务?

When the Celery Beat send one due task, Why the MainProcess Received three different task?

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

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]  

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