哪个更有效? threading.Thread与threading.Timer

时间:2019-12-05 03:06:50

标签: python python-3.x multithreading python-multithreading

这更多是出于理论上的好奇心,而不是我遇到的实际问题。

假设您要定期运行一些代码,就使用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方法是否会不是次优的?

1 个答案:

答案 0 :(得分:2)

如果代码必须在一定间隔内重复,请使用普通的Thread(要清楚,Timer只是Thread周围的薄包装;它实现为一个子类)。 (通过Timer)每秒产生一个新线程10倍很浪费,而且在任何情况下都不会给您带来任何好处。

但是,除非确实希望工作线程无限期地保持进程存活,否则应将工作线程设为守护程序线程。