多处理模块中的ThreadPool与Pool之间有什么区别?

多处理模块中的ThreadPool与Pool之间有什么区别?,第1张

多处理模块中的ThreadPool与Pool之间有什么区别?

multiprocessing.pool.ThreadPool
行为一样
multiprocessing.Pool
,唯一的区别在于使用线程,而不是进程运行的工人逻辑。

你看到的原因

hi outside of main()

会被多次打印

multiprocessing.Pool
是由于该池将生成5个独立的进程。每个进程将初始化其自己的Python解释器并加载模块,从而导致
print
再次执行顶层。

请注意,仅当使用

spawn
进程创建方法时才会发生这种情况(Windows上仅此方法可用)。如果使用
fork
一个(Unix),则与线程一样,该消息仅打印一次。

multiprocessing.pool.ThreadPool
作为其实现从未完成未记录。它缺少测试和文档。您可以在源代码中看到其实现。

我相信下一个自然的问题是:何时使用基于线程的池,何时使用基于进程的池?

经验法则是:

  • IO绑定作业->
    multiprocessing.pool.ThreadPool
  • CPU绑定作业->
    multiprocessing.Pool
  • 混合作业->取决于工作量,
    multiprocessing.Pool
    由于流程隔离带来的优势,我通常更喜欢

在Python
3上,您可能需要看一下

concurrent.future.Executor
池的实现。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5645754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存