0

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

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()

我如何 - 优雅地 - 停止反应器?如果我做:

self.transport.loseconnection()

在协议中,然后执行:

reactor.stop()

在工厂里,下一个客户将尝试再次停止反应堆。但是,这当然会导致错误:

Can't stop a reactor that isn't running

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

4

2 回答 2

0

我已经有一段时间没有对 Twisted 做过任何事情了,但你不能先检查一下reactor.running房产的价值吗?例如,

# Gracefully stop the reactor
if reactor.running:
    reactor.stop()
于 2013-06-25T04:11:38.407 回答
0

将您的反应器管理代码从您的协议实现中取出。将其替换为一些事件通知代码,您可以使用这些代码来了解连接何时完成了它需要做的所有事情。例如,触发一个Deferred.

然后等待所有的延迟并在它们都完成后停止反应器。您可能会发现gatherResults对此有所帮助。

于 2013-06-25T11:57:42.773 回答