Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:磁盘绑定任务、线程与进程_Python_Multithreading_Multiprocessing - Fatal编程技术网

python:磁盘绑定任务、线程与进程

python:磁盘绑定任务、线程与进程,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我解析一个大的源代码目录(100k文件)。我遍历每个文件中的每一行并进行一些简单的正则表达式匹配。我尝试将此任务线程化到多个线程,但没有得到任何加速。只有多处理才能将时间缩短70%。我知道GIL死亡抓地力,但是线程不应该帮助IO绑定访问吗 如果磁盘访问是串行的,为什么有几个进程更快地完成任务?Python“线程”允许独立的线程执行,但由于全局解释器锁定,通常不允许并发:一次只能运行一个线程。这可能就是为什么您只能通过多个进程获得加速,而这些进程不共享全局解释器锁,因此可以同时运行。是什么确保它是

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


如果磁盘访问是串行的,为什么有几个进程更快地完成任务?

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

是什么确保它是磁盘绑定的?因为我每行执行的唯一处理是更新预编译的正则表达式?是的。我不认为正则表达式匹配文件行比从操作系统获取文件句柄花费更多的时间。你试过分析这个程序吗?听起来你需要一些硬数据来取得进展。您可以尝试cProfile: