【问题标题】:python: disk-bound task, thread vs processpython:磁盘绑定任务,线程与进程
【发布时间】:2017-06-23 17:38:48
【问题描述】:

我解析一个大的源代码目录(100k 个文件)。我遍历每个文件中的每一行并进行一些简单的正则表达式匹配。我尝试将此任务线程化到多个线程,但没有得到任何加速。只有多处理才能将时间缩短 70%。我知道 GIL 死锁,但线程不应该帮助 IO 绑定访问吗?

如果磁盘访问是串行的,为什么多个进程可以更快地完成工作?

【问题讨论】:

  • 是什么让你确定它是磁盘绑定的?
  • 因为我对每行所做的唯一处理就是更新字典
  • 正则表达式是否已预编译?
  • 是的。我不认为正则表达式匹配文件行比从操作系统获取文件句柄花费更多时间。
  • 您是否尝试分析程序?听起来你需要一些硬数据才能取得进展。你可以试试cProfile:stackoverflow.com/questions/582336/how-can-you-profile-a-script

标签: python multithreading multiprocessing


【解决方案1】:

Python“线程”允许独立的执行线程,但由于全局解释器锁,通常不允许并发:一次只能真正运行一个线程。这可能是您只能通过多个进程获得加速的原因,这些进程不共享全局解释器锁,因此可以同时运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2012-11-05
    • 1970-01-01
    • 2010-11-10
    • 2010-12-18
    • 2012-10-12
    相关资源
    最近更新 更多