首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >multiprocessing.Process()或multiprocessing.Pool()会更均匀地分布在核心上吗?

multiprocessing.Process()或multiprocessing.Pool()会更均匀地分布在核心上吗?
EN

Stack Overflow用户
提问于 2013-08-13 22:36:31
回答 1查看 1.6K关注 0票数 1

在创建一个进程池或简单地循环一个进程以创建更多的进程之间有任何区别(在任何方面)吗?

这两者有什么区别?

代码语言:javascript
复制
pool = multiprocessing.Pool(5)
pool.apply_async(worker)
pool.join()

这个呢?

代码语言:javascript
复制
procs = []
for j in range(5):
        p = multiprocessing.Process(worker)
        p.start()
        procs.append(p)

for p in procs:
    p.join()

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-14 04:37:32

池的apply_async方法将只在池中任意选择的进程上运行worker函数一次,因此您的两个代码示例不会做完全相同的事情。要真正做到这一点,您需要调用apply_async五次。

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

另一方面,如果您有少量的任务要并行执行,并且您只需要完成每项任务一次,那么对每个任务使用一个单独的multiprocessing.Process可能是非常合理的,而不是设置一个池,启动作业然后拆卸池。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18220402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档