【发布时间】:2017-06-23 17:38:48
【问题描述】:
我解析一个大的源代码目录(100k 个文件)。我遍历每个文件中的每一行并进行一些简单的正则表达式匹配。我尝试将此任务线程化到多个线程,但没有得到任何加速。只有多处理才能将时间缩短 70%。我知道 GIL 死锁,但线程不应该帮助 IO 绑定访问吗?
如果磁盘访问是串行的,为什么多个进程可以更快地完成工作?
【问题讨论】:
-
是什么让你确定它是磁盘绑定的?
-
因为我对每行所做的唯一处理就是更新字典
-
正则表达式是否已预编译?
-
是的。我不认为正则表达式匹配文件行比从操作系统获取文件句柄花费更多时间。
-
您是否尝试分析程序?听起来你需要一些硬数据才能取得进展。你可以试试cProfile:stackoverflow.com/questions/582336/how-can-you-profile-a-script
标签: python multithreading multiprocessing