python 多处理池与进程



在这种情况下只是菜鸟:

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

我试过了

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

但它似乎还不够快

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

我在上面的代码中是否遗漏了一些东西,或者以这种方式创建的进程(如上面一样(运行得非常平行?

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

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

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

我建议使用multiprocessing.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))  

我也不是专家,但你应该尝试使用joblib并行

from joblib import Parallel, delayed  
import multiprocessing as mp
def random_function(args):
    pass
proc = mp.cpu_count()
Parallel(n_jobs=proc)(delayed(random_function)(args) for args in args_list)

这将使用许多可用的 cpu (n_jobs( 运行某个函数 (random_function(。

随意阅读文档!

相关内容

  • 没有找到相关文章

最新更新