我们有一个 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%,并不意味着它在那段时间实际上在进行计算工作。
