2017-05-15 10 views
2

Ich versuche, eine periodische Aufgabe innerhalb einer Django-App zu erstellen.Warum funktioniert die periodische Aufgabe von Sellerie nicht?

Ich habe das meinem settings.py:

from datetime import timedelta 

CELERYBEAT_SCHEDULE = { 
    'get_checkins': { 
     'task': 'api.tasks.get_checkins', 
     'schedule': timedelta(seconds=1) 
    } 
} 

Ich bin nur mit Sellerie Sie beginnen und habe nicht herausgefunden, welche Broker ich verwenden möchte, so fügte ich auch dies nur den Makler umgehen einstweilen:

if DEBUG: 
    CELERY_ALWAYS_EAGER = True 

ich habe auch eine celery.py Datei in meinem Projektordner:

from __future__ import absolute_import, unicode_literals 
import os 
from celery import Celery 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testproject.settings') 
app = Celery('testproject') 
app.config_from_object('django.conf:settings', namespace='CELERY') 
app.autodiscover_tasks() 

Inside my app namens api, ich machte eine tasks.py Datei:

from celery import shared_task 

@shared_task 
def get_checkins(): 
    print('hello from get checkins') 

ich den Arbeiter laufen und schlagen mit celery -A testproject worker --beat -l info

Es startet gut und ich kann die Aufgabe registriert unter [tasks] sehen , aber ich sehe keine Jobs, die protokolliert werden. Sollte einer pro Sekunde sein. Kann jemand sagen, warum das nicht ausgeführt wird?

+0

Haben Sie versucht, nur ' 'Zeitplan': 1.0'? –

+0

Das funktioniert auch, aber hat das Problem bisher nicht behoben. – Rob

Antwort

1

Ich schaute auf Ihren Beitrag und sehe keinen Kommentar zu dem Broker, den Sie zusammen mit Sellerie verwenden. Haben Sie einen Broker wie Rabbitmq installiert? Läuft es oder protokolliert irgendeinen Fehler? Sellerie braucht einen Makler, um Daten zu senden und zu empfangen.

Überprüfen Sie die Dokumentation hier (http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#choosing-a-broker)

+1

Ich habe vergessen zu erwähnen, dass ich momentan keinen Broker verwende. Ich führe Dinge synchron mit 'CELERY_ALWAYS_EAGER = True '. Natürlich werde ich einen in der Produktion verwenden. – Rob

+0

Ok, ist also kein Maklerproblem. Ich empfehle Ihnen jedoch dringend, vor dem Einsatz in der Produktion mit einem Test zu beginnen. Sellerie protokolliert irgendeinen Fehler oder eine Nachricht? –

+0

Kein Fehler, es tut nichts wirklich. – Rob

Verwandte Themen