Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python线程。计时器正在不等待地调用命令_Python_Multithreading_Timer - Fatal编程技术网

Python线程。计时器正在不等待地调用命令

Python线程。计时器正在不等待地调用命令,python,multithreading,timer,Python,Multithreading,Timer,我有一个非常基本的Tkinter应用程序,我正试图将其设置为自动刷新。我正在使用threading.Timer触发一个名为go的函数,在该函数的末尾调用计时器以重置它以再次运行 def SetTimer(): t=threading.Timer(5,go()) t.start SetTimer() 我花了下午的大部分时间试图解决这个问题,但我似乎不知道我做错了什么。根据我读到的其他问题,我了解到每个实例都会使用计时器创建一个单独的线程,但为什么不在触发函数之前等待时间的

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

def SetTimer():
    t=threading.Timer(5,go())
    t.start
    SetTimer()
我花了下午的大部分时间试图解决这个问题,但我似乎不知道我做错了什么。根据我读到的其他问题,我了解到每个实例都会使用计时器创建一个单独的线程,但为什么不在触发函数之前等待时间的流逝呢。

使用:

t=threading.Timer(5,go)
注意开始,而不是开始。括号告诉Python调用该函数。相反,go是一个函数对象。函数是Python中的一级对象;它们可以像任何其他对象一样传递给函数

Python在调用函数之前对函数的参数求值。因此,在调用threading.Timer之前,使用go调用go。go返回的值被发送到计时器,这不是您想要的

请注意,所有Tkinter UI代码都应该从单个线程调用。因此,使用Tkinter的root.after方法可能是更好的选择。after方法调度Tkinter的主循环调用的函数。以下是使用after的一些示例:


如果您使用的是Tkinter,那么使用线程自动刷新是解决问题的错误方法。您可以通过调用根小部件或任何小部件的after方法来安排将来运行的函数,从而避免线程的复杂性。@BryanOakley我会研究一下的,谢谢!这很有道理!谢谢你的帮助!