You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python threading多线程运行while循环占满单个CPU逻辑核心原因求解

问题原因
  • 核心诱因是主线程末尾的无阻塞空死循环:你代码最后写的while True: pass没有任何IO、sleep等阻塞逻辑,会持续占用CPU执行空指令,永远不会主动让出CPU资源。
  • 结合CPython的全局解释器锁(GIL)机制:同一时间只有一个线程可以执行Python字节码,你启动的两个子线程如果内部有sleep操作,会在sleep时主动释放GIL,此时空转的主线程就会立刻拿到GIL持续运行空循环,整体表现就是始终占满一个逻辑核心的算力。
  • 补充说明:你当前写的loop_function0、loop_function1的while循环外层没有加sleep逻辑,如果function0、function1内部也没有触发阻塞的逻辑,两个子线程也会加入GIL争抢,会进一步推高CPU占用,但核心占用来源还是主线程的空循环。
修复方案

你不需要修改业务函数,仅调整主线程的等待逻辑即可,两种常用方案:

  1. 给主线程的循环加sleep,等待时主动让出CPU:
# 替换原有的while True: pass
while True:
    sleep(3600) # 单次等待时长可按需调整,只要不为0就不会空转占CPU
  1. 用join方法阻塞等待子线程运行,完全不额外占用CPU:
# 保留原有线程类定义,修改启动和等待逻辑
t0 = thread0()
t1 = thread1()
# 主线程阻塞等待两个子线程退出,无任何空转开销
t0.join()
t1.join()

注意:如果你的代码未显式导入Thread类,需要在头部补充导入语句 from threading import Thread

内容的提问来源于stack exchange,提问作者ammernico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:45:06