我正在运行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,但现在它只是在wait命令上挂起,即使服务器已关闭。我查看了de Pyro4代码,我必须说我不知道连接丢失是如何解锁wait命令的,因为wait命令等待,直到Event boolean设置为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)
那么如何检测何时连接丢失?
答案 0 :(得分:0)
只需将Pyro4.config.COMMTIMEOUT
设置为正确的值(默认值为0,表示无限)。