Djangoつかって、
CeleryとCeleryBeatで定期的にタスクを仕込むときにハマりました。
CeleryBeat起動すると、PeriodicTaskをガンガン投げる事象が発生。
IntervalsでもCrontabsでもどっちもだめっぽい。
結論
TimezoneをUTC以外つかってはいけませんでした。
CELERY_TIMEZONE = 'Asia/Tokyo'
参考URL: https://github.com/celery/django-celery-beat/issues/129
以下、簡単な環境の説明です。
ざっくり以下のようなモジュールを入れてます。(PythonVersionは3.6.4です。)
Django==2.0.2
celery==4.1.0
django-celery==3.2.2
django_celery_beat=1.1.1
色々調べた結果,以下のような設定に落ち着く
BrokerにはrabbitMQを使ってます。
apps/settings.py
(Celery系のとこだけ抜粋)
#
# Celery for periodic tasks like a cron.
#
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers.DatabaseScheduler'
# use rabbitmq
CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = "rpc"
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True
Djangoってあんまり日本語のサイトなくて辛いです。