2015-03-03 9 views
7

Ich habe mehrere Seiten von Google-Ergebnissen mehrmals gelesen und bin sehr verwirrt darüber, wie ich mein Projekt gestalten soll. Ich habe es geschafft, Celerybeat mit dem periodic_task-Dekorator arbeiten zu lassen, aber das ist depreciated and is being removed. Von dem, was ich verstehe, the docs schlagen vor, dass CELERYBEAT_SCHEDULE der Ersatz ist. Ich habe eine Datei genau wie gezeigt erstellt, aber noch nicht herausgefunden:Wohin geht CELERYBEAT_SCHEDULE in Ihrem Projekt?

  • Wie nennt man es?
  • Wohin?

Ich finde es sehr schwer, den richtigen Weg zu finden Sellerie zu verwenden, in einem nicht-Django Projekt.

Antwort

7

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:

  1. Ihre Konfiguration in ein Modul Stoßen, wie celeryconfig.py
  2. Import das Modul, in dem Ihre Anwendung definieren oder verwendet wird. import celeryconfig
  3. 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.

Verwandte Themen