Python Threading.Timer无需等待即可调用命令

时间:2014-10-03 20:25:27

标签: python multithreading timer

我有一个非常基本的Tkinter应用程序,我试图设置为自动刷新。我正在使用threading.Timer来触发一个名为go的函数,在该函数结束时cocalls计时器将其重置为再次运行。

def SetTimer():
    t=threading.Timer(5,go())
    t.start
    SetTimer()

我下午大部分时间都在努力解决这个问题,但我似乎无法弄清楚我做错了什么。根据我读过的其他问题,我明白每个实例都会使用计时器创建一个单独的线程,但为什么不等待在触发函数之前经过的时间。

1 个答案:

答案 0 :(得分:4)

使用:

t=threading.Timer(5,go)

请注意go而不是go()。括号告诉Python调用该函数。相反,go是一个函数对象。功能是"一流" Python中的对象;它们可以像任何其他对象一样传递给函数。

Python在调用函数之前评估函数的参数。因此,在调用go()之前,使用go调用threading.Timergo()返回的值会发送到Timer,这不是您想要的。


请注意,应该从单个线程调用所有Tkinter UI代码。出于这个原因,使用Tkinter的root.after方法可能是您想要做的更好的选择。 after方法计划由Tkinter mainloop调用的函数。以下是使用after的一些示例: