2

gevent を使用して Python で記述されたアプリケーションを使用しています。明示的にトラップしていない例外の結果として、すぐに終了したい。

コア gevent コードにパッチを当てる必要があるようです。

geventまたはgreenletにパッチを当てずに、アプリでこれを行う方法はありますか?

4

2 に答える 2

4

バージョン 1.0betaを使用している場合は、微調整gevent.get_hub().SYSTEM_ERRORが役立ちます。SYSTEM_ERRORgevent によってキャッチされた場合、メインの 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と、未処理の例外はすべて致命的と見なされます。

于 2012-03-31T06:35:38.870 に答える