2015-12-28 14 views
9

entfernt Ich verwende Django 1.6, , celery 3.1.19.Sellerie Aufgaben mit eta werden von RabbitMQ

Es gibt eine periodische Aufgabe, die alle 30 Sekunden ausgeführt wird und 200 Aufgaben mit gegebenen eta Parameter erstellt. Nachdem ich den Selleriearbeiter laufen lasse, wird langsam die Warteschlange in RabbitMQ erstellt und ich sehe rund 1200 geplante Aufgaben, die darauf warten, gefeuert zu werden. Dann, starte ich den Sellerie-Arbeiter neu und alle wartenden 1200 geplanten Aufgaben werden von RabbitMQ entfernt.

Wie schaffe ich Aufgaben: my_task.apply_async((arg1, arg2), eta=my_object.time_in_future)

Ich betreibe den Arbeiter wie folgt aus: python manage.py celery worker -Q my_tasks_1 -A my_app -l

CELERY_ACKS_LATE ist auf True in Django-Einstellungen. Ich konnte keinen möglichen Grund finden.

Sollte ich den Arbeiter mit einer anderen Konfiguration/Flag/Parameter ausführen? Irgendeine Idee?

+0

1) Sind Sie sicher, dass Sie nur den Arbeiter nicht den ganzen Kaninchen-Server neu starten? 2) Vielleicht haben Sie einige Aufgaben 'ttl' Zeit und es wird einfach nach dieser Zeit entfernt? – matino

+0

1) Ich bin sicher, dass nur Arbeiter neu gestartet werden. 2) In keiner Konfiguration ist ttl auf task gesetzt. Es ist was Standard ist. Aber wenn ich die Arbeiter offen lasse, bleiben die Aufgaben in der Warteschlange. –

+0

Können Sie das Debugprotokoll freigeben? –

Antwort

1

Soweit ich weiß, verlässt sich Sellery nicht auf die geplanten Warteschlangen von RabbitMQ. Es implementiert intern ETA/Countdown.
Es scheint, dass Sie genug Arbeiter haben, die in der Lage sind, genug Nachrichten zu holen und intern zu planen.
Beachten Sie, dass Sie nicht 200 Arbeiter brauchen. Sie haben den Prefetch-Multiplikator auf den Standardwert gesetzt, sodass Sie weniger benötigen.

Verwandte Themen