Django-celery-beat рассылает спам по заданным задачам
Я использую django-celery-beat
для некоторых почасовых/дневных задач. Однако странное поведение заставило меня не знать, что делать.
Я создаю задачу, используя этот фрагмент кода:
periodic_task = apps.get_model('django_celery_beat', 'PeriodicTask')
interval_schedule = apps.get_model('django_celery_beat', 'IntervalSchedule')
schedule, _ = interval_schedule.objects.get_or_create(every=2, period='hours')
periodic_task.objects.update_or_create(
task=TASK,
defaults={'name': '<task description>', 'interval': schedule},
)
где TASK
- строка, указывающая на эту задачу:
@app.task(ignore_result=True)
def task():
<things to do>
pass
В коде вы видите, что я использую интервал в 2 часа, и как только я запустил ритм с помощью celery -A [project-name] beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
, никакой ошибки не выскакивает (я не знаю, работает ли это на самом деле, 2 часа - это много времени). Однако, когда я меняю интервал на 1 час, он выдает следующее:
[2021-12-21 15:32:45,333: INFO/MainProcess] Task app.tasks.task[6c0343b0-faf1-4eae-a8e0-721c862120a9] succeeded in 0.0s: None
[2021-12-21 15:32:45,336: INFO/MainProcess] Scheduler: Sending due task <task description> (app.tasks.task)
и далее продолжается до бесконечности, остановить можно только с помощью Ctrl+C.
У меня установлен плагин RabbitMQ Management, и в пользовательском интерфейсе все выглядит нормально - нет очереди, ничего не распаковано и т.д. Есть идеи, что это может быть причиной?
Даже после очистки очереди это все равно происходит (с celery -A [project-name] purge
).
Обновление, я нашел ответ здесь: https://github.com/celery/django-celery-beat/issues/95. Моя настройка TIME_ZONE
была неправильной (все еще установлен UTC, а не мой фактический часовой пояс, Европа/Амстердам), так что я думаю, что именно здесь все испортилось.