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 并且将两个参数映射到函数是丑陋的。
我是否在上面的代码中遗漏了某些内容,或者以这种方式创建的进程(如上)是否真的并行运行?
加速与您的 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)