簡體   English   中英

Python扭曲了停止具有多個客戶端的Reactor

[英]Python Twisted Stopping The Reactor With Multiple Clients

如果我通過這樣做創建多個客戶端:

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

在這種情況下如何優雅地停止反應堆?

自從我對Twisted進行任何操作以來已經有一段時間了,但是您不能先檢查一下reactor.running屬性的值嗎? 例如,

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

從您的協議實現中刪除反應堆管理代碼。 將其替換為一些事件通知代碼,您可以使用它們來了解連接何時已完成其需要做的所有事情。 例如,發射一個Deferred

然后等待所有延期完成的工作,然后停止反應堆。 您可能會發現gatherResults有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM