Ich habe eine Gevent-Anwendung, die mehrere Greenlets über mehrere Module erzeugt. Ich möchte in der Lage sein, die Anwendung ordnungsgemäß herunterzufahren (entweder intern oder durch Abfangen von SIGTERM
zum Beispiel), was ermöglicht, dass Gree-lets gut ablaufen, indem sie GreenletExit
abfangen und finally:
-Klauseln ausführen.Wie kann ich in einer Gevent-Anwendung alle Greenlets beenden, die gestartet wurden?
Wenn ich die a aller laufenden Greenlets hätte, könnte ich tun gevent.killall(list_of_greenlets)
, aber die Pflege einer solchen Liste ist eher ein Ärger; Außerdem muss gevent diese Liste in irgendeiner Form halten.
Kann ich also alle Greenlets beenden, die gestartet wurden, ohne eine Liste von ihnen zu führen?
(Ich verwende GEVENT 1.0.0 auf Python 2.7 auf raspbian)
Wir brauchen weitere Details Ihrer Implementierung von Greenlets. Verwenden Sie einen Pool, zB? Vielleicht funktioniert 'gevent.shutdown()' '' für Sie? – dorvak
Die meisten Module verwenden einfach 'gevent.spawn()', aber einige verwenden einen Pool oder was immer sie wollen. Außerdem gibt es kein 'gevent.shutdown()' in 1.0.0, und selbst wenn es solche gibt, kann es nicht von einem Nicht-Haupt-Greenlet ausgeführt werden, und Signalhandler wird mehr als wahrscheinlich in einem anderen enden. – squirrel