扭曲的反应堆太早停止

时间:2010-05-10 16:24:15

标签: 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())    
reactor.callWhenRunning(d.callback,None)
reactor.run()

在此代码中,反应器在完成tcp连接并且传递cmd之前停止。

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

1 个答案:

答案 0 :(得分:5)

简单的解决方案是在检测到退出条件时在代码中的某个位置调用reactor.stop()。具体来说,看起来你想在CommandClient中的某个地方调用它,我假设它将命令发送到远程机器并接收命令的退出代码。

如上所述,反应堆将启动并立即执行d.callback,然后再调用reactor.stop()。您的程序逻辑与对reactor.stop()的调用之间没有任何关联。将调用移动到程序的核心逻辑中,您应该进行设置。具体来说,我会看看你的CommandClient协议的connectionMade()& dataReceived()方法可能是检测“即时完成”情况的候选人。