Skip to main content
 首页 » 编程设计

python之当 CPU 利用率已经接近 100% 时,多线程是否有帮助

2025年05月04日21txw1958

我们有一个 python 程序可以读取大约 120,000 个 XML 文件,解析它们(使用 ElementTree),提取标签值(fromstring().findall())等。这需要很长时间。我们考虑使用线程并行化程序。但是 top 显示该单个进程的 CPU 消耗约为 100%。所以,我的问题是线程真的有用吗?我的直觉是线程只有在有空闲 CPU 时才有用。

我的系统配置是-

pavan8085@Xeek:/media/pavan8085/Projects/Pavan/CompBio$ lscpu 
Architecture:          x86_64 
CPU op-mode(s):        32-bit, 64-bit 
Byte Order:            Little Endian 
CPU(s):                4 
On-line CPU(s) list:   0-3 
Thread(s) per core:    2 
Core(s) per socket:    2 
Socket(s):             1 
NUMA node(s):          1 
Vendor ID:             GenuineIntel 
CPU family:            6 
Model:                 69 
Stepping:              1 
CPU MHz:               782.000 
BogoMIPS:              3392.44 
Virtualization:        VT-x 
L1d cache:             32K 
L1i cache:             32K 
L2 cache:              256K 
L3 cache:              3072K 
NUMA node0 CPU(s):     0-3 

PS:我是 Python 的新手。所以可能有一些特定于语言的技巧可以帮助提高速度。如果这是问题所在,我很乐意提供更多信息。

请您参考如下方法:

绝对是因为这里最有可能的瓶颈实际上是 I/O 而不是 CPU。所以你在这里做的是按顺序处理每个文件,所以每次你等待从磁盘读取文件时,你都会遇到瓶颈,阻止一切发生。如果您使用多个线程,您可以同时处理多个文件,当一个正在等待 I/O 时,其余的可以被处理。

这很好地解释了为什么 I/O 阻塞会导致高 CPU 使用率 http://www.chileoffshore.com/en/interesting-articles/126-linux-wait-io-problem

仅仅因为它是 100%,并不意味着它在那段时间实际上在进行计算工作。