Python 扭曲反应堆过早停堆

Python 扭曲反应堆过早停堆,python,networking,twisted,Python,Networking,Twisted,我正在执行批处理脚本以连接到tcp服务器,然后退出。 我的问题是我不能停止反应堆,例如: cmd = raw_input("Command: ") # custom factory, the protocol just send a line reactor.connectTCP(HOST,PORT, CommandClientFactory(cmd) d = defer.Deferred() d.addCallback(lambda x: reactor.stop()) reac

我正在执行批处理脚本以连接到tcp服务器,然后退出。 我的问题是我不能停止反应堆,例如:

cmd = raw_input("Command: ")

# custom factory, the protocol just send a line
reactor.connectTCP(HOST,PORT, CommandClientFactory(cmd) 
d = defer.Deferred()

d.addCallback(lambda x: reactor.stop())    
reactor.callWhenRunning(d.callback,None)
reactor.run()
在此代码中,在tcp连接完成并传递cmd之前,反应器停止


在所有操作完成后,如何停止反应器?

简单的解决方案是在检测到退出条件时,在代码中的某个点调用
reactor.stop()
。具体地说,我假设它将您的命令发送到远程机器并接收回命令的退出代码之后,您可能希望在CommandClient中的某个地方调用它

如前所述,反应器将启动并立即执行
d.callback
,然后调用
reactor.stop()
。程序逻辑与调用
reactor.stop()
之间没有任何联系。将调用移到程序的核心逻辑中,您应该被设置。具体地说,我将把CommandClient协议的
connectionMade()
dataReceived()
方法作为检测“im-done”状态的可能候选方法