Ich verwende Celery 4.0.1
mit Django 1.10
und ich habe Schwierigkeiten beim Planen von Aufgaben (Ausführen einer Aufgabe funktioniert gut). Hier ist die Sellerie-Konfiguration:Periodische Aufgaben in Sellerie (Selleriebeat) dynamisch einrichten mit add_periodic_task
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
app = Celery('myapp')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.BROKER_URL = 'amqp://{}:{}@{}'.format(settings.AMQP_USER, settings.AMQP_PASSWORD, settings.AMQP_HOST)
app.conf.CELERY_DEFAULT_EXCHANGE = 'myapp.celery'
app.conf.CELERY_DEFAULT_QUEUE = 'myapp.celery_default'
app.conf.CELERY_TASK_SERIALIZER = 'json'
app.conf.CELERY_ACCEPT_CONTENT = ['json']
app.conf.CELERY_IGNORE_RESULT = True
app.conf.CELERY_DISABLE_RATE_LIMITS = True
app.conf.BROKER_POOL_LIMIT = 2
app.conf.CELERY_QUEUES = (
Queue('myapp.celery_default'),
Queue('myapp.queue1'),
Queue('myapp.queue2'),
Queue('myapp.queue3'),
)
Dann in tasks.py ich habe:
@app.task(queue='myapp.queue1')
def my_task(some_id):
print("Doing something with", some_id)
In views.py Ich mag diese Aufgabe planen:
def my_view(request, id):
app.add_periodic_task(10, my_task.s(id))
Dann führe ich die Befehle:
sudo systemctl start rabbitmq.service
celery -A myapp.celery_app beat -l debug
celery worker -A myapp.celery_app
Aber die Aufgabe ist nie geplant. Ich sehe nichts in den Protokollen. Die Aufgabe funktioniert, denn wenn ich es meiner Meinung nach tue:
def my_view(request, id):
my_task.delay(id)
Die Aufgabe wird ausgeführt.
Wenn in meiner Konfigurationsdatei, wenn ich die Aufgabe manuell zu planen, wie dies funktioniert es: dynamisch
app.conf.CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {
'task': 'tasks.my_task',
'schedule': 10.0,
'args': (66,)
},
}
Ich kann einfach nicht die Aufgabe planen. Irgendeine Idee?
Picking up zusammengeführt: Ist es möglich, Verwenden Sie 'add_periodic_task()' auf App-Ebene, dh in 'task.py'? Es scheint eine bessere Kapselung zu sein, damit diese periodischen Aufgaben in der App deklariert werden. –
Eigentlich ist es überhaupt nicht notwendig, es zu verwenden, da es für Sie aufgerufen wird, wenn Sie nur 'app.conf.CELERYBEAT_SCHEDULE' Einstellungen Syntax verwenden, aber wenn Sie es explizit verwenden möchten, können Sie es in der' task.py' verwenden Datei. – DhiaTN
Ich glaube die neueste Version (nach 4.1.0) sollte diese angesprochen haben. Hier ist der Entwickler, der gerade läuft [# 3958] (https://github.com/sellery/sellery/pull/3958) –