如果我通过这样做创建多个客户端:
def main():
clients = [None]*10
for i in range(0, 10):
clients[i] = ClientFactory()
reactor.connectTCP('192.168.0.1', 8000, clients[i])
reactor.run()
如何 - gra-停止反应堆?如果我这样做:
self.transport.loseconnection()
在协议中,然后执行:
reactor.stop()
在工厂,然后下一个客户将尝试再次停止反应堆。但是,这当然会导致错误:
Can't stop a reactor that isn't running
如何在这种情况下优雅地停止反应堆?
答案 0 :(得分:0)
我用Twisted做了一段时间,但是你不能先检查reactor.running
属性的值吗?如,
# Gracefully stop the reactor
if reactor.running:
reactor.stop()
答案 1 :(得分:0)
从协议实施中取出反应堆管理代码。将其替换为一些事件通知代码,您可以使用它来了解连接何时完成所需的操作。例如,触发Deferred
。
然后等待所有延期并在完成所有工作后停止反应堆。您可能会发现gatherResults
对此有帮助。