Ich verwende Django 1.6
, RabbitMQ 3.5.6
, celery 3.1.19
.
Es gibt eine periodische Aufgabe, die alle 30 Sekunden ausgeführt wird und 200 Aufgaben mit dem angegebenen eta
-Parameter erstellt. Nachdem ich den Sellerie-Arbeiter ausgeführt habe, 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 ich Aufgaben erstelle:
my_task.apply_async((arg1, arg2), eta=my_object.time_in_future)
Ich führe den Arbeiter folgendermaßen aus:
python manage.py celery worker -Q my_tasks_1 -A my_app -l
CELERY_ACKS_LATE
wird in Django-Einstellungen auf True
gesetzt. Ich konnte keinen möglichen Grund finden.
Soll ich den Worker mit einer anderen Konfiguration / einem anderen Flag / Parameter ausführen? Irgendeine Idee?
Soweit ich weiß, verlässt sich Sellery nicht auf die Warteschlangen von RabbitMQ. Es implementiert ETA / Countdown intern.
Es scheint, dass Sie genug Mitarbeiter haben, die in der Lage sind, genug Nachrichten zu holen und sie intern zu planen.
Beachten Sie, dass Sie nicht 200 Arbeiter brauchen. Sie haben den Prefetch-Multiplikator auf den Standardwert gesetzt, so dass Sie weniger benötigen.
Tags und Links python django multithreading celery