该
multiprocessing.pool.ThreadPool行为一样
multiprocessing.Pool,唯一的区别在于使用线程,而不是进程运行的工人逻辑。
你看到的原因
hi outside of main()
会被多次打印
multiprocessing.Pool是由于该池将生成5个独立的进程。每个进程将初始化其自己的Python解释器并加载模块,从而导致
请注意,仅当使用
spawn进程创建方法时才会发生这种情况(Windows上仅此方法可用)。如果使用
fork一个(Unix),则与线程一样,该消息仅打印一次。
将
multiprocessing.pool.ThreadPool作为其实现从未完成未记录。它缺少测试和文档。您可以在源代码中看到其实现。
我相信下一个自然的问题是:何时使用基于线程的池,何时使用基于进程的池?
经验法则是:
- IO绑定作业->
multiprocessing.pool.ThreadPool
- CPU绑定作业->
multiprocessing.Pool
- 混合作业->取决于工作量,
multiprocessing.Pool
由于流程隔离带来的优势,我通常更喜欢
在Python
3上,您可能需要看一下
concurrent.future.Executor池的实现。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)