Python多进程编程:池映射(pool.map) vs 使用队列(Queues)

14

我正在尝试使用Pythonmultiprocessing包。在查看教程时,最清晰和直接的技术似乎是使用pool.map,它允许用户轻松命名进程数量并将函数和值列表传递给pool.map以分布在CPU上。我遇到的另一种技术是使用队列来管理工作程序池。这个答案很好地解释了pool.mappool.applypool.apply_async之间的区别,但是使用pool.map和像这个示例中使用队列有什么优缺点呢?

2个回答

10

pool.map技术是队列技术的“子集”。也就是说,如果没有pool.map,你可以轻松地使用PoolQueue来实现它。然而,使用队列使您在控制池进程方面具有更大的灵活性,例如,可以使特定类型的消息在进程生命周期内仅被读取一次,控制池进程的关闭行为等。


pool.map 在完成任务后会自动关闭进程吗? - Michael
1
从文档中可以看到:当池对象被垃圾回收时,会立即调用terminate()方法。。但是我们不能完全依赖这个特性,最好在应用程序结束时确保已关闭池。否则,你可能会在系统中留下一些僵尸进程。至于pool.map操作-不会关闭进程。只有当他们的进程池关闭或变为孤儿进程时,这些进程才会终止。 - Maciej Gol

4
如果您真的正在寻找“最清晰和最直接的技术”,使用 concurrent.futures.ProcessPoolExecutor 可能是最简单的方法。它有一个map方法以及其他一些基本操作,使其非常易于使用。它还兼容Queue

非常简单易用且直观的库。 - Jaydev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接