【问题标题】:Which is more efficient? threading.Thread vs threading.Timer哪个更有效率? threading.Thread 与 threading.Timer
【发布时间】:2019-12-05 03:06:50
【问题描述】:

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

假设您想定期运行一些代码,在 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 方法是否不是次优的,因为必须如此频繁地启动一个新线程?

【问题讨论】:

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


    【解决方案1】:

    如果代码必须在某个时间间隔内重复,请使用普通的 Thread(需要明确的是,Timer 首先只是 Thread 的一个薄包装;它是作为子类实现的)。每秒 10 次生成一个新线程(通过Timer)是一种浪费,无论如何也不会给你带来任何好处。

    你应该让工作线程成为守护线程,除非你真的希望它让进程无限期地保持活动状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2013-03-30
      相关资源
      最近更新 更多