Pyro 4.31 を実行しています。プロキシ オブジェクトがリモート オブジェクトへの接続を失ったとき (つまり、サーバーが突然シャットダウンしたとき) に、例外をキャッチできるようにする必要があります。
だから私はこのようなコードを持っています:
for ...
proxy = Pyro4.async(Pyro4.Proxy(pyro_uri))
future_result[i] = proxy.run()
... some other code
for ....
try:
future_result[i].wait()
except ConnectionClosedError:....
ある時点でこれが機能し、接続が失われた場合に ConnectionClosedError がスローされましたが、現在はサーバーがダウンしていても待機コマンドでハングし続けます。Pyro4 コードを調べたところ、待機コマンドは Event ブール値が True に設定されるまで待機するため、接続が失われると待機コマンドのブロックが解除される方法がわかりません。これは、サーバーがダウンしているときに実行することはまったく不可能です。サーバーがまだ稼働しているが、pyro デーモンをシャットダウンし、進行中のプロセスを突然強制終了すると、接続が閉じられたというエラーがスローされますが、サーバー全体がダウンしたときにそれが必要です。
非同期オブジェクトを使用しないと、これでも同じ問題が発生します (ハングするだけです):
proxy=Pyro4.Proxy(pyro_uri)
try: rs=proxy.run(mms)
except ConnectionClosedError: print "connection closed"
except TimeoutError: print "timeout error"
except CommunicationError: print "communication closed"
print "finished"
print str(rs)
では、接続が失われたことをどのように検出できますか?