Python获取CPU使用率及多核利用率优化方案

巷口听风
巷口听风
发布时间:2026-10-15| 6人浏览过
原创

本文介绍如何使用Python的psutil模块实时监控并持久化保存CPU每秒使用率。针对Python多线程无法充分利用多核CPU的问题,深入解析GIL机制的影响,并提供multiprocessing多进程、C语言扩展及ctypes调用动态库三种解决方案,帮助开发者充分利用计算资源。

监控CPU每秒使用率

需求说明

需要获取指定时间段内的CPU占用数据,并以持久化方式存储保存。

实现代码示例

import psutil
import time
# cpu_res = psutil.cpu_percent()
# print(cpu_res)
# 每一秒获取获取cpu的占有率 --->持久化保存
# 如何将时间和对应的cpu占有率去匹配
while True:
    # 获取当前时间和cpu的占有率
    t = time.localtime()
    cpu_time = '%d:%d:%d' % (t.tm_hour, t.tm_min, t.tm_sec)
    cpu_res = psutil.cpu_percent()
    print(cpu_res)
    # 保存在文件中
    with open('cpu.txt', 'a+') as f:
        f.write('%s %s \n' % (cpu_time, cpu_res))
    time.sleep(1)

1. 使用psutil模块获取本机硬件信息

2. 调用psutil.cpu_percent()函数获取CPU占用率

3. 利用元组时间格式精确记录时、分、秒

4. 将时间戳与CPU占用率数据写入cpu.txt文件

5. 使用time.sleep(1)设置1秒休眠,控制执行频率

运行结果展示

在cpu.txt文件中查看记录

Python充分利用CPU资源

当使用Python处理大规模数据或运行耗时较长的程序时,常发现CPU并未满载,即使启用多线程后利用率依然偏低。

这是因为默认情况下Python程序为单进程,仅使用单个CPU核心执行,导致多核处理器中其他核心闲置。

这种现象被称为“一核有难九核围观”,意味着超过50%的算力被浪费。本文将介绍解决此问题的方法。

多线程无法提升CPU使用率的原因

GIL的全称是Global Interpreter Lock,即全局解释器锁。

在Python主流实现CPython中,GIL是一个真实存在的全局线程锁。解释器执行任何Python代码前必须先获取该锁,遇到I/O操作时会释放锁。

对于纯计算型程序(无I/O操作),解释器每执行100次操作会释放一次锁,允许其他线程执行(该次数可通过sys.setcheckinterval调整)。

因此,尽管CPython线程库封装了操作系统原生线程,但作为整体,同一时刻仅有一个获得GIL的线程在运行,其他线程处于等待状态。

这导致即使开启多线程,CPU使用率依然不会显著升高。

如何充分利用多核运行程序

主要有三种方法

1. multiprocessing模块

multiprocessing是多进程标准库,使多进程Python程序的编写简化至类似多线程的程度,通过多进程方式利用多个CPU核心。

2. C语言扩展机制

若不想采用多进程这种重量级方案,可改用C/C++。无需完全重写,只需将关键部分用C/C++编写为Python扩展,其余部分仍用Python。通常计算密集型程序会用C代码编写并通过扩展集成到Python脚本中(如NumPy模块)。在扩展中可完全使用C创建原生线程,从而充分利用CPU计算资源。

3. ctypes模块

编写Python扩展往往较为复杂。Python提供了另一种与C模块互通的机制:ctypes。与Python扩展不同,ctypes允许Python直接调用任意C动态库的导出函数。只需使用ctypes编写少量Python代码即可实现。

以上为个人经验总结,希望能提供参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。