2016-01-31 4 views
13

Wo sollten Sie Sellerieeinstellungen aktualisieren? Auf dem Remote-Mitarbeiter oder dem Absender?Wo sollten Sie Sellerie Einstellungen aktualisieren? Auf dem Remote-Mitarbeiter oder Absender?

Zum Beispiel habe ich eine API mit Django und Sellerie. Die API sendet Remote-Jobs über einen Broker (RabbitMQ) an meine Remote-Mitarbeiter. Die Worker führen ein Python-Skript (nicht mit Django) aus, manchmal spawnen diese Unteraufgaben.

Ich habe Sellerie Einstellungen auf beiden Seiten (Absender und Arbeiter) erstellt, d. H. Beide benötigen die Einstellung BROKER_URL. Aber sagen wir, dass ich die Einstellung hinzufügen möchte CELERY_ACKS_LATE = True, an welches Ende füge ich diese Einstellung hinzu? Jeder der Remote-Mitarbeiter oder der Absender (API)?

Sowohl die API als auch die Remote-Mitarbeiter sind mit demselben Broker verbunden, wobei jeder Sellerie unterschiedlich startet. Die API erzeugt eine Sellerie Instanz über Django __init__.py und die Arbeiter starten Sellerie über Supervisor, d. H. celery -A tasks worker -l info

Antwort

5

Die Django-Sellerie-Einstellungen betreffen nur Arbeiter, die auf dem Django-Server selbst ausgeführt werden.

Wenn alle Ihre Mitarbeiter Remote-Mitarbeiter sind (so wie ich es tue), müssen Sie auf der Senderseite lediglich die Konfiguration vornehmen, die erforderlich ist, um eine Task an die Task-Warteschlange zu senden.

und alle anderen Einstellungen müssen auf den Remote-Mitarbeitern eingestellt werden.

und für die Aufgaben, auf der Senderseite, alles, was ich tun muß, ist die Task-Signatur wie folgt zu definieren:

@app.task(name='report_task') 
def reportTask(self, link): 
    pass 

dann auf dem Arbeiter Seite, müssen Sie mit einer neuen Sellerie App erstellen der gleiche Name und zeigt auf den gleichen Broker; Für andere Sellerieeinstellungen müssen Sie sie auf den entfernten Arbeitern erklären.

und Umsetzung der Aufgaben Logik auf den Remote-workeres (können Sie pro Arbeitnehmer verschiedene Aufgaben Logik haben, solange sie die gleiche Aufgabe Namen und die Funktion Argumente haben)

+0

das Sinn macht, bis ich an Dinge wie Route suchen und Warteschlangeneinstellungen diese Einstellungen müssen sicher auf den Absender eingestellt werden? Ich wäre nett, wenn der Sellerie beschriftet, welche Einstellungen Absender und was Client sind. – Prometheus

+0

Ja, die Einstellungen für die Route und die Warteschlange sollten auf dem Absender festgelegt werden. Dann starten Sie Ihre Remote Worker, um diese Warteschlange zu überwachen. – Soufiaane

1

CELERY_ACKS_LATE = True gehört zum Werker. Es beschreibt, ob der Arbeiter die Aufgabe sofort nach dem Konsumieren (vor dem Abschluss) oder nach dem Abschluss (spät) als "bestätigt" markieren soll. Beide Methoden have their drawbacks und ich denke, Sie wissen, was Sie tun.

Natürlich wäre es besser, eine einzige Konfigurationsdatei für beide Parteien zu haben und sie zu benutzen. Zum Beispiel haben Sie die gemeinsame Codebasis für das gesamte Projekt und nach dem Aktualisieren der Datei in VCS und Bereitstellung - starten Sie alle Parteien neu.

Aber in diesem Fall mit diesem bestimmten Flag können Sie nur Arbeiter neu starten.

Verwandte Themen