gevent を使用して Python で記述されたアプリケーションを使用しています。明示的にトラップしていない例外の結果として、すぐに終了したい。
コア gevent コードにパッチを当てる必要があるようです。
geventまたはgreenletにパッチを当てずに、アプリでこれを行う方法はありますか?
バージョン 1.0betaを使用している場合は、微調整gevent.get_hub().SYSTEM_ERROR
が役立ちます。SYSTEM_ERROR
gevent によってキャッチされた場合、メインの greenlet で再発生させる必要がある例外タイプをリストします。
デフォルトでは、SYSTEM_ERROR
です(KeyboardInterrupt, SystemExit, SystemError)
。その他すべての未処理の例外は報告されるだけですが、プロセスは終了しません (元の例外がメインの greenlet で発生した場合を除きます。この場合、通常の例外が発生します)。
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
SYSTEM_ERROR が定義されているソースを参照してください。
に設定SYSTEM_ERROR
するBaseException
と、未処理の例外はすべて致命的と見なされます。