Python多处理器脚本运行速度比原始脚本慢



我在StackOverFlow上读了很多线程,试图理解为什么我的多处理不能正常工作。

我需要从一个文件中获取IP,处理它们,然后将它们写入一个文件。我的处理涉及到大量的字典搜索,是最耗时的部分。

为了排除故障,我让函数在两个脚本(即常规脚本和多处理脚本(上休眠了1/10秒,当我这样做时,我的多处理脚本的工作速度实际上快了5倍。有了这些,我可以得出结论,我的多处理实际上是有效的。

下面的代码运行速度快5倍(为了简洁起见,我在两个脚本上都添加了time.sleep(0.1)行(:

from multiprocessing.dummy import Pool
import time
def main(argv):
*bunch of code calling processFunction*
def processFunction():
pool = Pool(10)
results = pool.map(processIP, ipList)
print(results)
pool.close()
pool.join()
def processIP():
time.sleep(0.1)

原始代码包含for循环,而不是多处理。我的问题是,如果我删除time.sleep(0.1)(在它们两者上(,我的脚本实际上比原始脚本多花费2到3秒。你知道为什么吗?

提前感谢您对的帮助

PS:我知道我实际上在使用多线程。该脚本假设处理大约25000个IP的列表

Python(至少是CPython实现(不擅长多线程,因为全局解释器锁定阻止了许多操作真正并行工作。一个例外是CCD_ 3ing,它可以有效地完成。

因此multiprocessing是存在的。但multiprocessing.dummy只是多线程的一个后备方案,它只意味着让依赖于多处理的代码在不支持它的系统上工作

由于您的代码只是执行多线程,所以它在睡眠时有效,但在工作时无效。

如果单个工作单元(此处:处理IP(不需要太多时间,但单元数量很高,为了使代码更有效,您应该创建由子进程一次处理的块,例如50个IP,以减少父进程和子进程之间的通信开销。

最新更新