Python Celery – Lookup Aufgabe von pid

Eine ziemlich unkomplizierte Frage, vielleicht – ich sehe oft einen Sellerie-Aufgabensatz, der auf meinem System läuft, den ich nicht finden kann, wenn ich celery.task.control.inspect() 's active() -Methode verwende. Oft wird dieser Prozess stundenlang laufen, und ich mache mir Sorgen, dass es ein Zombie irgendwelcher Art ist. Normalerweise verbraucht es auch viel Speicher.

Gibt es eine Möglichkeit, eine Aufgabe von linux pid aufzusuchen? Ist Sellerie oder das AMPQ Ergebnis Backend sparen das?

Wenn nicht, irgendeine andere Art und Weise, um herauszufinden, welche besondere Aufgabe ist die, die sitzt um Essen Gedächtnis sitzt?

—- aktualisiert:

Was kann ich tun, wenn active() sagt mir, dass es keine Aufgaben auf einer bestimmten Box laufen, aber die Box ist Speicher voll in vollem Umfang, und htop zeigt, dass diese Worker Pool Threads sind diejenigen, die es, aber zur gleichen Zeit Mit 0% CPU? Wenn es sich herausstellt, ist dies mit irgendeinem Quirk meiner aktuellen Rackspace-Setup verbunden und niemand kann antworten, ich werde immer noch Loren akzeptieren.

Danke ~

One Solution collect form web for “Python Celery – Lookup Aufgabe von pid”

Ich werde die Annahme machen, dass Sie mit 'Aufgabe' 'Arbeiter' meinen. Die Frage würde ansonsten wenig Sinn machen.

Für einen Kontext ist es wichtig, die Prozesshierarchie von Celery Worker Pools zu verstehen. Ein Worker-Pool ist eine Gruppe von Worker-Prozessen (oder Threads), die die gleiche Konfiguration teilen (Prozess-Meldungen der gleichen Reihe von Warteschlangen, etc.). Jeder Pool hat einen einzigen Elternprozess, der den Pool verwaltet. Dieser Prozess kontrolliert, wie viele Kinderarbeiter gegabelt sind und verantwortlich ist, um Kinder zu ersetzen, wenn Kinder sterben. Der übergeordnete Prozess ist der einzige Prozess, der an AMQP gebunden ist und die Kinder die Aufgaben des Elternteils über IPC aufnehmen und verarbeiten. Der übergeordnete Prozess selbst verarbeitet keine Aufgaben.

Darüber hinaus und auf eine Antwort auf Ihre Frage, ist der Elternprozess der Prozess verantwortlich für die Beantwortung Ihrer Sellerie Inspektion Sendungen, und die PIDs als Arbeiter im Pool aufgeführt sind nur die Kinder Arbeiter. Die übergeordnete PID ist nicht enthalten.

Wenn Sie den Celery-Daemon mit dem Befehlszeilenparameter –pidfile starten, enthält diese Datei die PID des übergeordneten Prozesses und Sie sollten in der Lage sein, diese PID mit dem Prozess zu verweisen, auf den Sie sich beziehen, um festzustellen, ob es ist Ist in der Tat ein Pool Elternteil. Wenn Sie Celery multi verwenden, um mehrere Instanzen zu starten (mehrere Worker-Pools), dann sollten standardmäßig PID-Dateien in dem Verzeichnis liegen, von dem aus Sie Celery multi aufgerufen haben. Wenn Sie nicht mit einem dieser Mittel zu starten Celery versuchen, mit einem von ihnen zu überprüfen, dass der Prozess ist kein Zombie und ist in der Tat einfach ein Elternteil.

Python ist die beste Programmiersprache der Welt.