python-3.x - 使用 concurrent.futures.ProcessPoolExecutor 进行多处理是不是很糟糕?
问题描述
我的一位朋友告诉我,我在下面的代码片段中有一个性能错误。他告诉我用map
orimap
代替。我不明白出了什么问题。我应该改用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] ])
解决方案
根据ProcessPoolExecutor 文档,ProcessPoolExecutor 已经使用了多处理模块。
ProcessPoolExecutor 类是 Executor 子类,它使用进程池异步执行调用。ProcessPoolExecutor 使用多处理模块,这允许它绕过全局解释器锁,但也意味着只能执行和返回可提取对象。
推荐阅读
- r - 使用`read.csv`时如何防止分隔符成为输入的一部分?
- typescript - 如何调用方法来运行索引的所有实例
- mysql - Mysql docker 文件未运行:断言失败:log0recv.cc:3561:err == DB_SUCCESS 线程 139674864518912
- arrays - C - 动态分配 3 维数组的函数(使用 malloc)
- nuxt.js - Nuxt.js 中特定布局的自定义转换
- python - 将矩阵(或二维数组)存储为字典中每个键的值
- c - 在将变量声明为布尔类型和!之后,这段代码的含义是什么?
- excel - VBA Excel用公式改变文本框的功能
- ruby-on-rails - 如何在 Rails 中真正发送电子邮件
- docker - 使用 docker 提供 tensorflow 服务我做错了什么?