2016-10-26 2 views
1

Ich bin neu in Sellerie. Ich versuche Sellery mit meinem Django-Projekt richtig zu konfigurieren. Um zu testen, ob der Sellerie funktioniert, habe ich eine periodische Aufgabe erstellt, die alle 2 Sekunden "periodic_task" drucken soll. Leider klappt es nicht aber kein Fehler.Einfache periodische Aufgabe in Sellerie funktioniert nicht, aber keine Fehler

Installierte rabbitmq

Project/project/celery.py

from __future__ import absolute_import 

import os 

from celery import Celery 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 

from django.conf import settings # noqa 

app = Celery('project') 

app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

@app.task(bind=True) 
def myfunc(): 
    print 'periodic_task' 

@app.task(bind=True) 
def debudeg_task(self): 
    print('Request: {0!r}'.format(self.request)) 

Project/project/__init__.py

from __future__ import absolute_import 

from .celery import app as celery_app 

Settings.py

INSTALLED_APPS = [ 
    'djcelery', 
    ...] 
... 
... 

CELERYBEAT_SCHEDULE = { 
    'schedule-name': { 
         'task': 'project.celery.myfunc', # We are going to create a email_sending_method later in this post. 
         'schedule': timedelta(seconds=2), 
         }, 
    } 

Und vor python manage.py, betreibe ich celery -A project worker -l info

Noch keine "periodic_task" in der Konsole ... alle 2 Sekunden gedruckt sehen Sie, was zu tun wissen Sie?

EDIT SELLERIE KONSOLE:

-------------- [email protected]_NB v3.1.23 (Cipater) 
---- **** ----- 
--- * *** * -- Windows-8-6.2.9200 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   dolava:0x33d1350 
- ** ---------- .> transport: amqp://guest:**@localhost:5672// 
- ** ---------- .> results:  disabled:// 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . project.celery.debudeg_task 
    . project.celery.myfunc 

EDIT:

Nach Arbeiter Wechsel zu schlagen, es scheint zu funktionieren. Irgendetwas passiert alle 2 Sekunden (geändert in 5 Sekunden), aber ich kann die Ergebnisse der Aufgabe nicht sehen. (Ich kann alles in die CELERYBEAT_SCHEDULE setzen, sogar falschen Weg und es spielt wirft keine Fehler ..)

Ich änderte myfunc Code:

@app.task(bind=True) 
def myfunc(): 
    # notifications.send_message_to_admin('sdaa','dsadasdsa') 
    with open('text.txt','a') as f: 
     f.write('sa') 

Aber ich kann nicht überall sehen text.txt .

> celery -A dolava beat -l info 
celery beat v3.1.23 (Cipater) is starting. 
__ - ... __ -  _ 
Configuration -> 
    . broker -> amqp://guest:**@localhost:5672// 
    . loader -> celery.loaders.app.AppLoader 
    . scheduler -> djcelery.schedulers.DatabaseScheduler 

    . logfile -> [stderr]@%INFO 
    . maxinterval -> now (0s) 
[2016-10-26 17:46:50,135: INFO/MainProcess] beat: Starting... 
[2016-10-26 17:46:50,138: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:51,433: INFO/MainProcess] DatabaseScheduler: Schedule changed. 

[2016-10-26 17:46:51,433: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:51,812: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
[2016-10-26 17:46:51,864: INFO/MainProcess] Writing entries... 
[2016-10-26 17:46:57,138: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
[2016-10-26 17:47:02,230: INFO/MainProcess] Scheduler: Sending due task schedule-name (dolava_app.tasks.myfunc) 
+0

Läuft RabbitMQ Service? –

+0

@anonymous Ja, ich denke, es hat nicht funktioniert, bis ich RabbitMQ installiert habe. Es kann etwas Offensichtliches sein, weil ich sehr neu und sehr verwirrt mit Sellerie bin. Ich habe einen Teil der Sellerie-Konsole am Ende der Frage hinzugefügt. –

+0

Beachten Sie auch, dass, wenn Sie den Code innerhalb Sellerie Aufgabe aktualisieren. Sie müssen den Sellerie-Service neu starten, damit Änderungen –

Antwort

3

Versuchen zu laufen

$ celery -A project beat -l info

+0

Dieses scheint zu helfen. Ich kann in Sellerie-Konsole sehen, dass etwas passiert jede 2 (oder geändert, um 5) Sekunden. Das Problem ist, dass der myfunc keine Wirkung zu haben scheint. Ich habe am Ende der Frage eine Konsolenausgabe hinzugefügt. –

+1

Oh, ich renne das statt Arbeiter. Als ich versuchte, Arbeiter und Schlag gleichzeitig zu laufen, funktionierte es. –

Verwandte Themen