2015-08-29 8 views
2

Это продолжение для another question, к которому у меня теперь есть решение, но реализация, похоже, не ведет себя правильно по несвязанным причинам.Python: threading.timer не соблюдает интервал

У меня есть следующий код:

import time 
import datetime 
import threading 

def scheduled_function(cycle): 
    cycle += 1 
    print "Cycle " + str(cycle) + " complete." 
    print "Next cycle at " + (datetime.datetime.now() + datetime.timedelta(minutes=5)).strftime("%l:%M%p") 

    threading.Timer(300, scheduled_function(cycle)).start() # New cycle every 5 mins 
    return 

scheduled_function(1) 

while(True): 
    command = raw_input() 
    print command 

В общем, это, кажется, сделать то, что я хочу, - что позволяет пользователю вводить команды в то время как в фоновом режиме, в то время как функция периодически называют делать какой-то регулярной деятельности , Однако интервал (300 в этом случае, который должен равняться 5 минутам), кажется, ничего не делает, и программа достигает максимальной глубины рекурсии в течение секунды или около того. (Макс. Рекурсия не является проблемой для реального скрипта, так как она, скорее всего, не будет работать более нескольких часов за раз).

Как я использую threading.Timer ошибочно?

ответ

4

Это потому, что вы вызываете его сразу и не позволяете Timer называть его для вас.

threading.Timer(300, scheduled_function, args=[cycle,]).start() 
+0

Ах, конечно! Спасибо! – DTR

Смежные вопросы