2016-12-25 3 views
0

Mein Kollege hat Sellerie Aufgaben geschrieben, notwendige Konfiguration in der Einstellungsdatei, auch Supervisoren Konfigurationsdatei. Alles funktioniert einwandfrei. Die Projekte werden mir übergeben und ich sehe einige Probleme, die ich beheben muss.Sellerie Aufgabe nicht von Arbeiter erhalten, wenn zwei Projekte

Es gibt zwei Projekte laufen auf einer einzigen Maschine, beide Projekte sind fast gleich, lassen Sie sie projA und projB anrufen.

supervisord.conf Datei ist als:

;for projA 
[program:celeryd] 
directory=/path_to_projA/ 
command=celery -A project worker -l info 
... 

[program:celerybeat] 
directory=/path_to_projA/ 
command=celery -A project beat -l info 
... 

; For projB 
[program:celerydB] 
directory=/path_to_projB/ 
command=celery -A project worker -l info 
... 

[program:celerybeatB] 
directory=/path_to_projB/ 
command=celery -A project beat -l info 
... 

Das Problem ist, ich bin Aufgaben durch eine Schleife zu schaffen und nur eine Aufgabe von celeryd von projA empfangen wird, und Aufgabe verbleiben, werden nicht in den empfangenen (oder konnte erhalten werden von celeryd von projB).

Aber wenn ich aufhören Sellerie-Programme für projB funktioniert alles gut. Bitte beachten Sie, der eigentliche Name der Django-App ist Projekt daher Sellerie -A Projekt Worker/Beat -l info.

Bitte bare, ich bin neu zu Sellerie, jede Hilfe ist willkommen. TIA.

+2

Verwenden Sie denselben Broker für beide Projekte? Sieht so aus, als ob das hier das Problem ist. Versuchen Sie separate Broker für beide zu verwenden. – anupsabraham

+1

Bitte geben Sie Ihre Sellerieeinstellungen an. – Jinje

Antwort

1

Da die Sellerie docs sagt

Sellerie ist eine asynchrone Task-Queue/Auftragswarteschlange basierend auf verteilten Message Passing.

Wenn mehrere Aufgaben durch eine Schleife erstellt werden, werden Aufgaben verteilt auf zwei verschiedene Arbeitskräfte, dh Arbeiter von projA und Arbeiter von projB da Ihre Mitarbeiter gleich sind.

Wenn Projekte ähnlich sind oder wie Sie erwähnt fast das gleiche, können Sie Celery Queue verwenden, aber natürlich Ihre Warteschlangen über Projekte sollten anders sein. Sellerie Docs für die gleiche ist here zur Verfügung gestellt.

Sie benötigen CELERY_DEFAULT_QUEUE, CELERY_DEFAULT_ROUTING_KEY und CELERY_QUEUES in Ihrer settings.py Datei einzustellen.

Und Ihre supervisor.conf Datei muss Warteschlangenname in der Befehlszeile für alle Programme.

Für Ex: command=celery -A project beat -l info -Q <queue_name>

Und das sollte funktionieren, basierend auf meiner Erfahrung.

+0

Danke, ich habe die Warteschlange verwendet, aber die Frage nicht aktualisiert. Mein Fehler. Aber die Antwort ist ähnlich wie bei mir. –

Verwandte Themen