Python扭曲停止具有多个客户端的反应器

时间:2013-06-25 03:27:11

标签: python client-server twisted reactor

如果我通过这样做创建多个客户端:

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

如何在这种情况下优雅地停止反应堆?

2 个答案:

答案 0 :(得分:0)

我用Twisted做了一段时间,但是你不能先检查reactor.running属性的值吗?如,

# Gracefully stop the reactor
if reactor.running:
    reactor.stop()

答案 1 :(得分:0)

从协议实施中取出反应堆管理代码。将其替换为一些事件通知代码,您可以使用它来了解连接何时完成所需的操作。例如,触发Deferred

然后等待所有延期并在完成所有工作后停止反应堆。您可能会发现gatherResults对此有帮助。