我应该每次都创建一个新的Pool对象还是重用一个?

Ero*_*mic 7 python multiprocessing python-multiprocessing

我正在尝试使用Python的multiprocessing.Pool对象来理解最佳实践.

在我的程序中,我经常使用Pool.imap.通常每次我并行启动任务时,我都会创建一个新的池对象,然后在完成后关闭它.

我最近遇到了挂起,其中提交到池的任务数量少于进程数.奇怪的是它只发生在我的测试管道中,它之前运行了很多东西.作为独立运行测试不会导致手.我认为它与制作多个池有关.

我真的很想找到一些资源来帮助我理解使用Python多处理的最佳实践.具体来说,我目前正在尝试了解制作多个池对象与仅使用一个池对象的含义.

nox*_*fox 6

当创建工作进程池时,父进程会产生新的进程。这是一个非常快的操作,但是有其成本。

因此,只要您没有充分的理由(例如,由于一名工人意外死亡导致Pool中断),最好始终使用同一Pool实例。

如果不检查代码,就很难说出挂起的原因。您可能没有正确清理先前的实例(调用close()/ stop(),然后始终调用join())。您可能通过“池”通道发送了太大的数据,该数据通常以死锁结束,依此类推。

如果您提交的任务少于工作者,那么池肯定不会中断。该池旨在将任务数量与工作人员数量分离开来。