首页 > 解决方案 > 使用 concurrent.futures.ProcessPoolExecutor 进行多处理是不是很糟糕?

问题描述

我的一位朋友告诉我,我在下面的代码片段中有一个性能错误。他告诉我用maporimap代替。我不明白出了什么问题。我应该改用multiprocessing包吗?如何改进?

with concurrent.futures.ProcessPoolExecutor() as executor:
    result = list(future.result() for future in
                          [ executor.submit(do_something, id) for id in [1,2,3] ])

标签: python-3.xmultiprocessing

解决方案


根据ProcessPoolExecutor 文档,ProcessPoolExecutor 已经使用了多处理模块。

ProcessPoolExecutor 类是 Executor 子类,它使用进程池异步执行调用。ProcessPoolExecutor 使用多处理模块,这允许它绕过全局解释器锁,但也意味着只能执行和返回可提取对象。


推荐阅读