У меня есть приложение Twisted / PyQt, которое (помимо прочего) подключается к группе удаленных ресурсов.Когда пользователь закрывает окно, я хочу закрыть все соединения, по возможности чисто, принудительно, если нет.
Проблема в том, что к тому времени, когда я иду, чтобы закрыть соединения, кажется, что реактор неДольше жив, чтобы позволить мне сделать это.
Вот код моего приложения:
# Create app and connect the Twisted/Qt reactors
app = QApplication(sys.argv)
qtreactor.qt4reactor.install()
# Shutdown Twisted when window is closed
@defer.inlineCallbacks
def stop():
print "="*40, "Closing connections..."
yield closeConnections()
print "="*40, "closed."
print "="*40, "Stopping reactor..."
reactor.stop()
print "="*40, "stopped."
app.connect(app, SIGNAL("lastWindowClosed()"), stop)
reactor.runReturn()
rc = app.exec_()
exit(rc)
А вот урезанная версия моего кода очистки:
@defer.inlineCallbacks
def closeConnections():
for connection in connections:
print "Closing connection #%s" % connection
yield threads.deferToThread(popen("/foo/bar/cleanup %s" % connection))
print "Connection closed."
Первыйоператор print достигнут, и команда выполнена, но я никогда не получаю второй, и при этом я не выполняю цикл for несколько раз.
Правильно ли выполнен мой анализ?Проблема в том, что реактор уже остановлен, поэтому я никогда не получаю ответ от threads.deferToThread?Или есть другая проблема?Кроме того, как мне это исправить?
Спасибо, Джонатан