J'essaie de m'enseigner une programmation Twisted rudimentaire grâce à this tutorial et beaucoup d'autres. Je suis venu à cet exemple actuel que je ne peux pas comprendre pourquoi il fait ce qu'il fait.Le réacteur s'est arrêté plus tôt que prévu?
Résumé: J'ai instancié trois réacteurs qui comptent de 5 à 1 avec différents retards dans leur comptage. La seule chose est, il semble que lorsque le premier compteur (avec le plus court délai) arrive à 0, il arrête non seulement son propre réacteur, mais tous les autres.
#!/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!'
Sortie
Start!
5 ...1
5 ...2
5 ...3
4 ...3
4 ...2
3 ...3
2 ...3
4 ...1
3 ...2
1 ...3
Stop!
J'avais l'impression que si les trois compteurs doivent décompter à leur propre rythme et compléter leur progression 5-> 0, le programme attendrait tous pour terminer avant de quitter Ai-je mal compris quelque chose dans les façons de Twisted ici?
Brian, merci pour le conseil. Peut-être que je ne suis pas assez familier avec les méthodes de Twisted, mais comment pourrais-je coder un conditionnel à la recherche du «dernier timer»? J'ai pensé utiliser getDelayedCalls, mais cela ne semble fonctionner qu'avec callLater, et pas avec callWhenRunning. – jfofo