[英]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.