这更多是出于理论上的好奇心,而不是我遇到的实际问题。
假设您要定期运行一些代码,就使用CPU而言,使用Timer与使用线程+ time.sleep的优缺点是什么?
以下两种方法的作用相同。我知道Thread方法并不是精确的一秒间隔,而是在每次执行后增加一个延迟,如果task_function
操作花费很长时间,这可能很重要。我也知道,还有许多其他方法可以解决此问题,但让我们关注线程包。
计时器方法
def task_function():
print(time.time())
def task():
task_function()
threading.Timer(1,task).start()
task()
线程方法
def task_function():
while True:
print(time.time())
time.sleep(1)
threading.Thread(target=task_function).start()
我在某处读到,启动线程会占用大量资源。因此,我想知道如果您希望每隔0.1秒运行一次代码,由于必须经常启动新线程,那么Timer方法是否会不是次优的?
答案 0 :(得分:2)
如果代码必须在一定间隔内重复,请使用普通的Thread
(要清楚,Timer
只是Thread
周围的薄包装;它实现为一个子类)。 (通过Timer
)每秒产生一个新线程10倍很浪费,而且在任何情况下都不会给您带来任何好处。
但是,除非确实希望工作线程无限期地保持进程存活,否则应将工作线程设为守护程序线程。