私は、複数のグリーンレットを複数のモジュールにわたって生成するgeventアプリケーションを持っています。私はアプリケーションを正常にシャットダウンすることができます(内部的にも、例えばSIGTERM
をキャッチして)。GreenletExit
をキャッチし、finally:
句を実行することで、グリーンレットをうまく終了させることができます。ゲレンベントでは、始まったすべてのグリーンレットをどうやって殺すことができますか?
もし私がすべてのグリーンレットを実行していれば、私はgevent.killall(list_of_greenlets)
をやることができますが、そのようなリストを維持することはむしろ面倒です。そのうえ、geventは何らかの形でこれを非常にリストにしておく必要があります。
だから、リストを維持せずに開始されたすべてのグリーンレットを殺すことはできますか?
(私はraspbian上のpython 2.7にgevent 1.0.0を使用しています)
私たちはあなたのgreenletsの実装の詳細を知る必要があります。あなたはプールを使っていますか?たぶん '' '' gevent.shutdown() ''はあなたのために働くでしょうか? – dorvak
ほとんどのモジュールは単に 'gevent.spawn()'を使うつもりですが、いくつかはプールなどを使っているかもしれません。また、1.0.0には 'gevent.shutdown()'もありません。もし存在していても、メインでないグリーンレットからは実行できず、シグナルハンドラは別のものに終わる可能性が高くなります。 – squirrel