Я пытаюсь научить себя некоторому элементарному программированию на витой основе благодаря этому учебнику и многим другим. Я пришел к этому текущему примеру, который я не могу понять, почему он делает то, что делает.
Краткое резюме: Я создал три реактора с обратным отсчетом от 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 здесь?