2012-03-28 6 views
1

私は、geventを使ってPythonで書かれたアプリケーションを使っています。私はそれが私が明示的にトラップしていない例外の結果としてすぐに終了したい。どのように例外を除いてすぐにgeventアプリケーションを終了できますか?

私はコアgeventコードにパッチを適用する必要があるだろうように見えます。

geventまたはgreenletにパッチを適用せずに私は、私のアプリでこれを行うことができます任意の方法はありますか?

+1

未処理の例外が発生したときにアプリケーションが直面しても、アプリケーションはまだ終了していません。 –

+0

ええ、ええ、デフォルトの動作はこれを行うことです。あなたはどこかで ''例外を捕まえる 'なんてやっていないと確信していますか? –

答えて

3

あなた、あなたは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_ERRORBaseExceptionに設定すると、未処理の例外はすべて致命的と見なされます。

0

あなたはspawn_link_exceptionの代わりspawnを使用することができます。

関連する問題