2010-07-15 5 views
1

J'utilise le framework twisted, et j'ai besoin de garder une trace du temps écoulé depuis le début d'un événement, et d'effectuer une action quand une certaine quantité est passée.Exécuter une fonction cochée Twisted

La meilleure façon de procéder est de vérifier l'horodatage de chaque tic du réacteur. Si c'est la meilleure façon, comment puis-je le faire? Si ce n'est pas le cas, quoi de mieux?

Répondre

1

La fonctionnalité que je cherchais semble être décrit ici: Running a function periodically in twisted protocol

Voici mon code:

def check_time(self): 
     for game in self.games: 
      if self.games[game]['state'] == 'GAME': 
       game_start_time = self.games[game]['starttime'] 
       if game_start_time is None: 
        continue 
       elif game_start_time + 300 > time.time(): 
        #300 seconds = 5 minutes. 
        continue 
       else: 
        self.end_game(game) 
def __init__(self): 
    self.timecheck = task.LoopingCall(self.check_time) 
    self.timecheck.start(1) 
2

Vous voulez utiliser callLater.

Voici un exemple complet et exécutable qui fait ce que vous demandez, "effectuer une action quand une certaine quantité (de temps) s'est écoulée depuis le début d'un événement".

from twisted.internet import reactor 
certainAmount = 0.73 # this is in seconds 
def startedEvent(): 
    print 'started event' 
    reactor.callLater(certainAmount, performAnAction) 

def performAnAction(): 
    print 'performed an action' 
    reactor.stop() 
startedEvent() 
reactor.run() 

(je ne pense pas qu'il y ait vraiment une telle chose comme une « tique » dans le réacteur, au moins, pas dans le sens que je devine que vous voulez dire.)

+0

Cela ne fais ce que je voulais. J'ai fini par utiliser task.LoopingCall pour comparer deux timestamps par seconde. Voir le lien dans ma réponse. –

+0

@Alex. Vous avez réussi. 'LoopingCall' - si vous voulez, er, Looping Calls et' CallLater' comme Glyph mentionné si vous voulez programmer un appel. C'est une alternative supérieure à «dormir» puis «faire» - puisque «dormir» bloquerait le «réacteur» et vous ne le voulez pas. –

Questions connexes