python多处理池与进程?

don*_*yor 2 python multiprocessing

在这种情况下只是菜鸟:

我尝试在多个进程中运行一个函数,这样我就可以在更短的时间内处理一个巨大的文件

我试过

for file_chunk in file_chunks:
    p = Process(target=my_func, args=(file_chunk, my_arg2))
    p.start()
    # without .join(), otherwise main proc has to wait 
    # for proc1 to finish so it can start proc2
Run Code Online (Sandbox Code Playgroud)

但似乎还不够快

现在我问自己,它是否真的在并行运行作业。我也考虑过 Pool ,但我使用的是 python2 并且将两个参数映射到函数是丑陋的。

我是否在上面的代码中遗漏了某些内容,或者以这种方式创建的进程(如上)是否真的并行运行?

nox*_*fox 6

加速与您的 PC 拥有的 CPU 内核数量成正比,而不是与块的数量成正比。

理想情况下,如果您有 4 个 CPU 内核,您应该会看到 4 倍的加速。在考虑性能改进时,还必须考虑其他因素,例如 IPC 开销。

生成太多进程也会对您的性能产​​生负面影响,因为它们会相互竞争 CPU。

我建议使用 amultiprocessing.Pool来处理大部分逻辑。如果您有多个参数,只需使用该apply_async方法。

from multiprocessing import Pool

pool = Pool()

for file_chunk in file_chunks:
    pool.apply_async(my_func, args=(file_chunk, arg1, arg2))  
Run Code Online (Sandbox Code Playgroud)