私は、geventを使ってPythonで書かれたアプリケーションを使っています。私はそれが私が明示的にトラップしていない例外の結果としてすぐに終了したい。どのように例外を除いてすぐにgeventアプリケーションを終了できますか?
私はコアgeventコードにパッチを適用する必要があるだろうように見えます。
geventまたはgreenletにパッチを適用せずに私は、私のアプリでこれを行うことができます任意の方法はありますか?
私は、geventを使ってPythonで書かれたアプリケーションを使っています。私はそれが私が明示的にトラップしていない例外の結果としてすぐに終了したい。どのように例外を除いてすぐにgeventアプリケーションを終了できますか?
私はコアgeventコードにパッチを適用する必要があるだろうように見えます。
geventまたはgreenletにパッチを適用せずに私は、私のアプリでこれを行うことができます任意の方法はありますか?
あなた、あなたはgevent.get_hub().SYSTEM_ERROR
はあなたを助けることができます微調整、その後version 1.0betaを使用しています。 SYSTEM_ERROR
は、geventによってキャッチされた場合、メインのgreenletで再生成されるべき例外タイプをリストします。デフォルトでは
、SYSTEM_ERROR
は(KeyboardInterrupt, SystemExit, SystemError)
です。未処理の例外はすべて報告されますが、処理が終了しません(元の例外がメインのグリーンレットで発生している場合を除き、通常の場合は例外です)。
あなたはSYSTEM_ERRORを変更することができます。
import gevent
gevent.spawn(int, "xxx").join() # will merely report ValueError on stderr
gevent.get_hub().SYSTEM_ERROR += (ValueError,)
gevent.spawn(int, "xxx").join() # will report ValueError, but then it will also re-raise it
はsource where SYSTEM_ERROR is definedを参照してください。
SYSTEM_ERROR
をBaseException
に設定すると、未処理の例外はすべて致命的と見なされます。
あなたはspawn_link_exception
の代わりspawn
を使用することができます。
未処理の例外が発生したときにアプリケーションが直面しても、アプリケーションはまだ終了していません。 –
ええ、ええ、デフォルトの動作はこれを行うことです。あなたはどこかで ''例外を捕まえる 'なんてやっていないと確信していますか? –