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, все они начинались с чего-то вроде celery -A <app> worker -B ...
, что в основном запускает 3 отдельных планировщика. Люди часто совершают эту ошибку... Совет: не запускайте воркеры Celery со встроенным бит-процессом (опция -B
). Эта опция была добавлена в Celery, чтобы упростить разработку. Он никогда не предназначался для использования в производстве.
Проблема не в воркерах... Проблема в том, что у вас тоже запущены встроенные планировщики.
Я прочитал ссылку , знаю, что не запускайте свои воркеры Celery со встроенным процессом beat (опция -B), но я не понимаю, почему не разрешить.
Несколько (N) запущенных процессов Celery beat означают, что у вас будет N дублированных задач, поскольку все N из них будут запускать задачи, потому что они не знают, что там есть другие планировщики...
Спасибо. Действительно, я открыл три рабочих процесса сельдерея.