为什么脚本的CPU的利用率直接爆满

101 阅读1分钟

今天在重构代码的时候遇到了一个问题,新改的脚本CPU使用率都高达107%-109%。正常情况下一个300行左右的脚本代码完全不应该出现这种情况,除非运算特别多。

CPU使用率高最终的原因:

            while True:
                # 任务队列已经执行完成
                if self.task_que.empty():
                    self.logger.info("任务队列已经执行完成!")
                    break
                # 如果有线程死亡
                if len(threading.enumerate()) < (self.thread_num + 1):
                    self.logger.info("线程异常死亡,需要追踪原因!")

主线程为了监控子线程的状态有上面的代码,因为是个while True,代码中只有判断,没有任何睡眠等操作。导致这段代码会疯狂执行,问题就出现在这里。修改策略:我选择让它睡眠3秒(这里其实睡眠1s,甚至0.1s都可以,CPU的时间片和我们正常的时间不是一个量级),发现我们的CPU使用率大概维持在20%左右。

            while True:
                # 任务队列已经执行完成
                if self.task_que.empty():
                    self.logger.info("任务队列已经执行完成!")
                    break
                # 如果有线程死亡
                if len(threading.enumerate()) < (self.thread_num + 1):
                    self.logger.info("线程异常死亡,需要追踪原因!")
                    exit()
                time.sleep(3)