我正在做一个批处理脚本来连接到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之前停止。
在完成所有操作后,如何停止反应堆?
答案 0 :(得分:5)
简单的解决方案是在检测到退出条件时在代码中的某个位置调用reactor.stop()
。具体来说,看起来你想在CommandClient中的某个地方调用它,我假设它将命令发送到远程机器并接收命令的退出代码。
如上所述,反应堆将启动并立即执行d.callback
,然后再调用reactor.stop()
。您的程序逻辑与对reactor.stop()
的调用之间没有任何关联。将调用移动到程序的核心逻辑中,您应该进行设置。具体来说,我会看看你的CommandClient协议的connectionMade()
& dataReceived()
方法可能是检测“即时完成”情况的候选人。