【问题标题】:Python Twisted Stopping The Reactor With Multiple ClientsPython Twisted 用多个客户端停止反应堆
【发布时间】:2013-06-21 17:44:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: python client-server twisted reactor


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这并不理想。 running 并不意味着你认为它做了什么,所以这个解决方案有时仍然会失败。
      猜你喜欢
      • 1970-01-01
      • 2016-02-14
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2013-12-24
      • 2019-07-16
      相关资源
      最近更新 更多