哪个更有效率? threading.Thread 对比 threading.Timer

Which is more efficient? threading.Thread vs threading.Timer

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

假设您想定期 运行 一些代码,就 CPU 消耗而言,使用定时器与使用线程的优缺点是什么 + 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 方法是否不是最佳选择,因为新线程必须如此频繁地启动?

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

尽管如此,您应该将工作线程设为守护线程,除非您真的希望它让进程无限期地保持活动状态。