0

我正在运行 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 ,但现在即使服务器已关闭,它也会一直挂在等待命令上。我查看了 de Pyro4 代码,我必须说我看不到连接丢失如何解除阻塞等待命令,因为等待命令一直等到事件布尔值设置为 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)

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

4

1 回答 1

0

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

于 2016-01-14T23:44:30.713 回答