2015-03-27 2 views
0

Я запускаю pyro 4.31. Мне нужно уловить исключение, когда прокси-объект теряет соединение с удаленным объектом (т. Е. Когда сервер внезапно отключается).Pyro4 не бросает ConnectionClosedError

Так что я такой код:

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, и я должен сказать, что не вижу, как потеря соединения может разблокировать команду wait, так как команда wait ожидает, пока для параметра «Булевое событие» будет установлено значение «Истина», что невозможно сделать, когда сервер не работает. Если сервер все еще работает, но я завершаю пироп-пирог и внезапно убиваю текущий процесс, тогда возникает ошибка закрытия соединения, но я хочу, чтобы весь сервер опустился.

Не используя объект асинхронной это все еще дает ту же самую проблему (просто висит):

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

Просто установите Pyro4.config.COMMTIMEOUT на правильное значение (по умолчанию 0 и означает бесконечность).