这是another question的后续内容,我现在已经找到了解决方案,但由于无关原因,实施似乎并不正常。
我有以下代码:
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?
答案 0 :(得分:4)
那是因为你马上打电话给我,而不是让Timer
给你打电话。
threading.Timer(300, scheduled_function, args=[cycle,]).start()