1

セクションで「いくつかのこと」を行うサーバーがあり、その周りに「with gevent.Timeout(5)」があります。私は別のグリーンレットでいくつかのチェックを行っていますが、その「何か」を実行したグリーンレットの 1 つが 45 分間実行されていることに気付きました。最終的にプログラムを再起動して強制終了する必要がありました(他の方法で強制終了することは知っていますが、それは問題ではありません..)。

gevent.monkey.patch_all() も使用してパッチを当てます。「いくつかのもの」の部分にはネットワーク接続が含まれており、それらの場所のいずれかに何かが詰まっていると推測しています。タイムアウト例外が発生しなかった理由がわかりません。gevent.Timeout 例外が発生しなかった理由を知っている人はいますか?

4

1 に答える 1

0

を使用したときはいつでもgevent.Timeout、コンテキスト マネージャーとしても使用しましたが、2 番目の引数を使用しましたFalse。このようにして、コンテキスト マネージャーはすべての例外を抑制し、コードのチャンクだけを残します。たとえば、ブロックが値を正常に設定したかどうかを確認することで、フォローアップできます。

result = None
with gevent.Timeout(5, False):
    # Something that stalls

if result == None:
    # Take care of business

これは私にとって非常に確実に機能しました。のデフォルトの 2 番目の引数exceptionは-- 独自の例外タイプに置き換えてみましたかgevent.Timeout? NoneそれともException

于 2013-03-28T20:34:01.120 に答える