哪个更有效率? 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 次是浪费,并且在任何情况下都不会给您带来任何好处。
尽管如此,您应该将工作线程设为守护线程,除非您真的希望它让进程无限期地保持活动状态。
这更多是出于理论上的好奇,而不是我遇到的实际问题。
假设您想定期 运行 一些代码,就 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 次是浪费,并且在任何情况下都不会给您带来任何好处。
尽管如此,您应该将工作线程设为守护线程,除非您真的希望它让进程无限期地保持活动状态。