Запускать функцию каждый тик в Twisted - PullRequest
1 голос
/ 16 июля 2010

Я использую витую платформу, и мне нужно отслеживать, сколько времени прошло с момента начала события, и выполнять действие, когда определенное количество прошло.

Мне кажется, что лучший способ сделать это - проверить по отметке времени каждый такт реактора.Если это лучший способ, как мне это сделать?Если это не так, что может быть лучше?

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Вы хотите использовать callLater.

Вот полный, запускаемый пример, который выполняет то, что вы просите, "выполнить действие, когда определенное количество (времени) прошлос момента начала события ".

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()

(я не думаю, что на самом деле есть такая вещь, как" тик "в реакторе, по крайней мере, не в том смысле, что я предполагаю, что вы имеете в виду.)

1 голос
/ 16 июля 2010

Функциональность, которую я искал, похоже, описана здесь: Периодическое выполнение функции по витому протоколу

Вот мой код:

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)
...