提问人:ArekBulski 提问时间:7/12/2016 更新时间:8/7/2018 访问量:24563
concurrent.futures.ProcessPoolExecutor 与 multiprocessing.pool.Pool [重复]
concurrent.futures.ProcessPoolExecutor vs multiprocessing.pool.Pool [duplicate]
问:
请向我解释这两个类有什么区别?
我注意到 Python 2 中存在模块。但是在功能上呢?multiprocessing
答:
76赞
mgilson
7/12/2016
#1
如文档中所述,concurrent.futures.ProcessPoolExecutor
是 .因此,适用相同的限制(例如,对象需要是可腌制的)。multiprocessing.Pool
multiprocessing
但是,旨在提供一个抽象接口,可用于以方便的方式管理不同类型的异步任务。例如,将异步策略从使用进程池更改为使用线程通常就像更改一两行代码一样简单(而不是需要自己编写代码)。抽象的另一个(相关)好处是提供了一个单一的 API 来记住 -- 你可以选择最适合任务的 Executor。使用您的流程是否受 IO 限制?太棒了,使用 .您是否会因为全局解释器锁定 (GIL) 而无法加快速度?没问题,请使用 .concurrent.futures
concurrent.futures
ThreadPoolExecutor
ProcessPoolExecutor
评论
15赞
mgilson
8/7/2018
@ospider -- 想详细说明吗?据我所知,问题在于 和 之间有什么区别。答案(如我所见)是它们具有基本相同的功能(后者是前者的包装器,它提供了一个不同的接口,目的是制作一个接口,该接口也可以通过“简单地”切换出 Executor 类来与线程一起使用)。ProcessPoolExecutor
multiprocessing.Pool
0赞
Rafael Almeida
4/10/2021
而 concurrent.futures.ProcessPoolExecutor 确实使用多处理模块。它不是 Pool 的包装器。首先,如果池的进程被终止而不是作为多处理永远挂起,则会引发异常。池
评论