Es ist ein wenig verwirrend, dass the docs es so aussieht, als wäre Ihre CELERYBEAT_SCHEDULE eine separate Datei. In Wirklichkeit ist es ein Eintrag in Ihrer App (alias: Sellery() instance) config wie Sie können see it listed here. Also, wie auch immer Sie die Konfiguration in Ihre App bekommen, das ist der richtige Weg.
Es gibt viele Möglichkeiten, um die Konfiguration in die App zu bekommen. Wenn Sie „Explicit is better than implicit“ glauben, dann wollen Sie wahrscheinlich:
- Ihre Konfiguration in ein Modul Stoßen, wie
celeryconfig.py
- Import das Modul, in dem Ihre Anwendung definieren oder verwendet wird.
import celeryconfig
- Wenden Sie das Modulobjekt auf Ihre App an.
app.config_from_object(celeryconfig)
Beispiel celeryconfig.py Datei
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'
Der Versuch, es in eine Datei wie beatschedule.py
zu setzen und dann celery -A beatschedule beat
laufen erhalten Sie AttributeError: 'module' object has no attribute 'celery'
I this project erstellt Celerybeat in Aktion zur Demo wie in den Dokumenten beschrieben. Ich glaube, es ist besser zu zeigen, wie alles funktioniert, als die Dokumente allein zu lesen. Ich habe auch this Docker image erstellt, um es so einfach wie möglich zu machen.