Threading.Timer(5, function) 每 5 秒启动一次
Threading.Timer(5, function) launch every 5 second
我很难使用线程中的 Timer
函数。
基本上,当我的程序启动时,我想每隔 x 秒记录一次统计数据。
所以我想我可以使用 Timer
函数(每 5 秒启动一次函数)。
现在,我做到了:
from threading import Timer
def startLogger():
while True:
t = Timer(5, function)
t.start()
def function():
print("hey")
但是启动出错,所以我认为这不是一个好方法。
RuntimeError: can't start new thread
如果有人能给我线索,将不胜感激!
您可以只创建一个线程,然后 运行 从那里开始所有代码,而不是每五秒启动一个新线程。
from time import sleep
from threading import Thread
def startLogger():
while True:
function()
sleep(5)
def function():
print("hey")
Thread(target=startLogger).start()
startLogger
将继续运行。它会调用 function
,然后暂停 5 秒,然后重新开始,调用 function
等等。
它进入自己的线程,因此 sleep(5)
不会同时停止您的主线程 5 秒。
您可以尝试以下方法。这个想法是,您要在此函数主体的末尾安排下一个函数调用:
import threading
def mylog():
print "hey"
` threading.Timer(5.0, mylog)`.start()
mylog()
我很难使用线程中的 Timer
函数。
基本上,当我的程序启动时,我想每隔 x 秒记录一次统计数据。
所以我想我可以使用 Timer
函数(每 5 秒启动一次函数)。
现在,我做到了:
from threading import Timer
def startLogger():
while True:
t = Timer(5, function)
t.start()
def function():
print("hey")
但是启动出错,所以我认为这不是一个好方法。
RuntimeError: can't start new thread
如果有人能给我线索,将不胜感激!
您可以只创建一个线程,然后 运行 从那里开始所有代码,而不是每五秒启动一个新线程。
from time import sleep
from threading import Thread
def startLogger():
while True:
function()
sleep(5)
def function():
print("hey")
Thread(target=startLogger).start()
startLogger
将继续运行。它会调用 function
,然后暂停 5 秒,然后重新开始,调用 function
等等。
它进入自己的线程,因此 sleep(5)
不会同时停止您的主线程 5 秒。
您可以尝试以下方法。这个想法是,您要在此函数主体的末尾安排下一个函数调用:
import threading
def mylog():
print "hey"
` threading.Timer(5.0, mylog)`.start()
mylog()