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)
Läuft RabbitMQ Service? –
@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. –
Beachten Sie auch, dass, wenn Sie den Code innerhalb Sellerie Aufgabe aktualisieren. Sie müssen den Sellerie-Service neu starten, damit Änderungen –