gpt4 book ai didi

python - multiprocessing.Process() 或 multiprocessing.Pool() 会更均匀地分布在核心之间吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:38 26 4
gpt4 key购买 nike

创建进程池或简单地遍历一个进程以创建更多进程之间有任何区别(以任何方式)吗?

这有什么区别?:

pool = multiprocessing.Pool(5)
pool.apply_async(worker)
pool.join()

还有这个?

procs = []
for j in range(5):
p = multiprocessing.Process(worker)
p.start()
procs.append(p)

for p in procs:
p.join()

池是否更有可能使用更多的内核/处理器?

最佳答案

池的 apply_async 方法只会在池中任意选择的进程上运行一次 worker 函数,因此您的两个代码示例不会完全正确一样的东西。要真正等效,您需要调用 apply_async 五次。

我认为哪种方法更适合给定的任务,这在一定程度上取决于您在做什么。 multiprocessing.Pool 允许您在每个进程中执行多个作业,这可能会更容易并行化您的程序。例如,如果您有一百万个项目需要单独处理,您可以创建一个具有合理数量进程(可能与 CPU 内核一样多)的池,然后将百万个项目的列表传递给 池。 map 。池会将它们分发给各个工作进程(并收集返回值以返回给父进程)。启动一百万个单独的进程不太实用(它可能会破坏您的操作系统)。

另一方面,如果您要并行执行少量作业,并且每个作业只需要完成一次,则使用单独的 multiprocessing.Process 可能是完全合理的每个工作,而不是建立一个池,启动工作然后拆除池。

关于python - multiprocessing.Process() 或 multiprocessing.Pool() 会更均匀地分布在核心之间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18220402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com