Ich benutze Sellerie und Tierpfleger (Kazoo-Sperre), um meine Arbeiter zu sperren. Ich habe ein Problem, wenn ich einen der Arbeiter töte (-9), bevor ich das Schloss loslasse, dann bleibt dieses Schloss für immer geschlossen.
Meine Frage ist also: Wird die Prozessfreigabe in diesem Prozess gesperrt, oder ist das ein Fehler in zookee?
Das Beenden eines Prozesses mit einem Kill-Signal führt nicht dazu, "Software-Sperren" wie ZooKeeper-Sperren zu löschen.
Die einzige Art von Sperren, die durch ein KILL-Signal getötet werden, sind Sperren auf Betriebssystemebene, da alle Dateideskriptoren gelöscht werden und die Dateideskriptorsperren daher ebenfalls gelöscht werden. Aber soweit es ZooKeeper betrifft, sind das keine Sperren auf Betriebssystemebene (wäre es nur, weil der ZooKeeper-Prozess, selbst auf demselben Computer, nicht der Ihres Python-Prozesses ist).
Es ist daher kein Fehler in ZooKeeper und ein erwartetes Verhalten von kill -9.
Zookeeper Sperren verwenden ephemere Knoten . Ein ephemerer Knoten ist ein Knoten, der so lange lebt, wie die Sitzung, die ihn erstellt hat, am Leben ist. Die Sitzungen werden durch den Prozess am Leben gehalten, indem die Sitzung periodisch eine Heartbeat-Nachricht an den Zoowächter sendet.
Wenn Sie also den Prozess beenden, mit dem die Sperre erstellt wurde, wird die Sperre schließlich aufgehoben, da die Sitzung beendet wird, da der Tierpfleger keine Herzschläge mehr empfängt.
Wenn man also einen Arbeiter tötet, bevor die Sperre ausgelöst wird, sollte die Sperre schließlich aufgehoben werden.
Wenn das Schloss nie freigegeben wird, könnten ein paar Dinge passieren,
Es ist sehr unwahrscheinlich, dass es sich um einen Tierpfleger handelt.
Woher wissen Sie, dass die Sperre nicht aufgehoben wird?
Tags und Links python celery locking apache-zookeeper kazoo