Это немного запутанно, что the docs делает его похожим на ваш CELERYBEAT_SCHEDULE - это отдельный файл. На самом деле это запись в вашем приложении (ака: Celery()), как вы можете see it listed here. Поэтому, однако, вы получаете конфигурацию в своем приложении, вот и все.
Существует множество способов получить конфигурацию в приложении. Если вы считаете, что «Explicit is better than implicit», то вы, вероятно, хотите:
- Поместите свой конфиг в модуль, как
celeryconfig.py
- импортировать модуль, где ваше приложение определить или используется.
import celeryconfig
- Примените объект модуля к вашему приложению.
app.config_from_object(celeryconfig)
файл Пример celeryconfig.py
from datetime import timedelta
BROKER_URL = "redis://redis.local:6379/0"
BROKER_TRANSPORT_OPTIONS = {'fanout_prefix': True, 'fanout_patterns': True, 'visibility_timeout': 480}
CELERY_RESULT_BACKEND = BROKER_URL
CELERYBEAT_SCHEDULE = {
'addrandom-to-16K-every-2-seconds': {
'task': 'celery_test.tasks.addrandom', # notice that the complete name is needed
'schedule': timedelta(seconds=2),
'args': (16000, 42)
},
}
CELERY_TIMEZONE = 'UTC'
Попытка поместить его в файл как beatschedule.py
и затем запустить celery -A beatschedule beat
поможет вам AttributeError: 'module' object has no attribute 'celery'
Я создал this project демо Celerybeat в действии как описано в документах. Я считаю, что он лучше показывает, как все это работает, чем чтение документов в одиночку. Я также создал this Docker image, чтобы сделать его работу максимально простой.