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

2024-09-29 17:47:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图了解Python的最佳实践多处理.池对象。在

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

我最近遇到了一个挂起,提交给池的任务数少于进程数。奇怪的是,它只发生在我的测试管道中,它之前运行了一堆东西。以独立方式运行测试不会导致手动操作。我想这和多个泳池有关。在

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


Tags: 对象程序管道进程方式手动资源pool
1条回答
网友
1楼 · 发布于 2024-09-29 17:47:46

创建工作进程池时,将从父进程派生新进程。这是一个非常快速的行动,但它有它的成本。在

因此,只要您没有很好的理由,例如由于一个工人意外死亡而导致池破裂,最好始终使用同一个池实例。在

如果不检查代码,很难判断挂起的原因。您可能没有正确清理以前的实例(调用close()/stop(),然后始终调用join())。您可能通过池通道发送了太大的数据,这通常会导致死锁等等。在

当然,如果你提交的任务比工人少,资金池不会破裂。池的设计正是为了将任务数与工人数脱钩。在

相关问题 更多 >

    热门问题