【发布时间】:2015-01-05 15:44:43
【问题描述】:
我们有一个 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 完全陌生。所以可能有一些特定于语言的技巧可以帮助提高速度。如果这是问题所在,我很乐意提供更多信息。
【问题讨论】:
-
Do some profiling 看看时间在哪里。
-
另外,请确保您没有使用太多内存。您使用 fromstring 的事实意味着您一次至少将一个文件完全读入内存,这是没有理由的。如果您正在阅读所有这些内容,那么您的时间都可以花在交换上。
标签: python multithreading xml-parsing operating-system