CPU密集型程序的判断依据是CPU使用率持续接近100%且几乎不等待I/O、不阻塞、不频繁让出控制权;可通过top/htop、任务管理器或psutil实时监测,结合代码特征(大量数值计算、无显式等待、GIL影响明显)、time.process_time与perf_counter对比,以及cProfile分析热点函数来综合判定。

看 CPU 使用率是否持续接近 100%(单核或整体),同时观察程序是否几乎不等待 I/O、不阻塞、也不频繁让出控制权——这是最直接的判断依据。
观察运行时的资源占用
代码运行时,用系统工具实时查看 CPU 占用:
- Linux/macOS:终端中运行 top 或 htop,找到你的 Python 进程,看 %CPU 列是否长期稳定在 80%–100%
- Windows:打开任务管理器 → “性能”选项卡 → 查看 CPU 曲线是否持续高位波动,再切换到“详细信息”找 python.exe 的 CPU 占用率
- 更精准可配合 psutil 在代码中采样:psutil.Process().cpu_percent(interval=1) 连续测几次,若稳定 >90%,大概率是 CPU 密集
分析代码行为特征
不依赖工具,从逻辑上快速识别:
- 大量数值计算:如矩阵运算(NumPy 未启用多线程 BLAS)、循环累加/排序/加密哈希、递归求解(斐波那契、DFS 暴力搜索)
- 无显式等待:不含 time.sleep()、requests.get()、open().read()、queue.get() 等 I/O 或同步阻塞调用
- GIL 影响明显:纯 Python 循环(如 for i in range(10**8): total += i)在 CPython 下无法并行提速,多线程几乎不降 CPU 时间
对比执行时间与等待时间
用 time.perf_counter() 和 time.process_time() 分开测量:
立即学习“Python免费学习笔记(深入)”;
- process_time() 只计 CPU 执行时间(不含休眠、I/O 等等待)
- perf_counter() 计真实流逝时间
- 如果两者非常接近(比如差值 perf_counter >> process_time,说明大量时间花在等待上(I/O 密集)
用 cProfile 看热点函数
运行 python -m cProfile -s cumtime your_script.py,重点关注:
- 高 cumtime(累计时间)且 tottime(自身耗时)也高的函数,尤其是纯 Python 函数(非 C 扩展)
- 大量时间消耗在 built-in method 如 sum、sorted、list.append 循环调用中
- 没有长时间停在 select、recv、write 等系统调用上










