Pyro4不会抛出ConnectionClosedError

时间:2015-03-27 11:09:28

标签: python-2.7 amazon-ec2 pyro

我正在运行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)

那么如何检测何时连接丢失?

1 个答案:

答案 0 :(得分:0)

只需将Pyro4.config.COMMTIMEOUT设置为正确的值(默认值为0,表示无限)。