感谢this tutorial和其他许多人,我正在努力教自己一些基本的Twisted编程。我来到这个当前的例子,我无法弄清楚为什么它正在做它正在做的事情。
简短摘要:我已经实例化了三个反应堆,这些反应堆的数量从5减少到1,计数延迟不同。唯一的问题是,当第一个计数器(延迟时间最短)达到0时,它不仅会停止自己的反应堆,还会阻止所有其他反应堆。
#!/usr/bin/env python
class Countdown(object):
counter = 5
def count1(self):
from twisted.internet import reactor
if self.counter == 0:
reactor.stop()
else:
print self.counter, '...1'
self.counter -= 1
reactor.callLater(1, self.count1)
def count2(self):
from twisted.internet import reactor
if self.counter == 0:
reactor.stop()
else:
print self.counter, '...2'
self.counter -= 1
reactor.callLater(0.5, self.count2)
def count3(self):
from twisted.internet import reactor
if self.counter == 0:
reactor.stop()
else:
print self.counter, '...3'
self.counter -= 1
reactor.callLater(0.25, self.count3)
from twisted.internet import reactor
reactor.callWhenRunning(Countdown().count1)
reactor.callWhenRunning(Countdown().count2)
reactor.callWhenRunning(Countdown().count3)
print 'Start!'
reactor.run()
print 'Stop!'
输出
Start!
5 ...1
5 ...2
5 ...3
4 ...3
4 ...2
3 ...3
2 ...3
4 ...1
3 ...2
1 ...3
Stop!
我的印象是,虽然所有三个计数器都应按自己的速度倒计时并完成5> 0的进展,但程序会在退出之前等待所有这些计数器完成。我是否误解了Twisted的方式?
答案 0 :(得分:1)
我不熟悉扭曲,但是从浏览谷歌搜索结果看起来反应堆是一个事件循环。你只有其中一个,所以第一个命中reactor.stop()的计数器会停止循环。
要做你想做的事,你需要删除reactor.stop()调用和结构的东西,这样当最后一个计时器到达它结束时,只有它,调用reactor.stop()
答案 1 :(得分:0)