python - 为什么 Anaconda 中的多处理比 Python 慢

标签 python anaconda multiprocessing profiling

例如,相同的代码在 anaconda 环境中运行速度明显比在裸 python 环境中慢

import multiprocessing as mp
from tqdm.auto import tqdm

def summer(i):
    return i+i

with mp.Pool(6) as pool:
    data = range(100000)
    results = tqdm(pool.imap_unordered(summer, data), total=len(data))
    results = list(results)
    pool.close()
    pool.join()

python环境中的时间:

$time python testscript.py 
100%|████████████████████████████| 100000/100000 [00:02<00:00, 45094.94it/s]

real    0m2,316s
user    0m3,953s
sys     0m1,525s

conda 环境中的时间:

$time python testscript.py 
100%|████████████████████████████| 100000/100000 [00:03<00:00, 26315.68it/s]

real    0m3,873s
user    0m6,157s
sys     0m1,912s

这可能是什么根本原因?尝试使用 viztracer 分析代码,但它只是表明 summer() 需要更长的时间来执行。 后续问题:有没有办法在 python 中进行更深入的剖析?

最佳答案

你的 3.7 比 3.8 快似乎真的很奇怪

理由3.8应该比3.7快

可能的罪魁祸首
  • pickle 模块中的默认协议(protocol)现在是协议(protocol) 4(pickle 用于发送 args 并从子进程接收返回值)
  • 减少了转换传递给许多内置函数和方法的参数的开销(也可能有利于从 pickle 流中解包参数)

不太可能是罪魁祸首

  • 通过将展开 block 堆栈的逻辑移至编译器,简化了解释器循环。
  • 所有 GC 跟踪对象(例如元组、列表、字典)的大小都减少了 4 或 8 个字节。

不同操作的多个 python 版本的速度变化示例(也是 3.8 更新日志的页面):

https://docs.python.org/3/whatsnew/3.8.html#demos-and-tools

关于python - 为什么 Anaconda 中的多处理比 Python 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66248018/

相关文章:

python - CondaHTTPError : HTTP 000 CONNECTION FAILED for url <https://conda. anaconda.org/plotly/win-64/current_repodata.json>

python - 将 Python 启动器指向 Anaconda 安装

具有多处理功能的 Python 代码在 AWS EC2 上使用 32 个内核比使用 16 个内核慢

python - 将 yaml 文件保存到生成器对象到字典 python

python - 如何在可浏览的 Django Rest API 中隐藏 HTML 表单中的字段?

python - Odoo 报告字段数据在预期时为 "Undefined"False

python - 无法在 macbook air 中创建 conda 环境(Resolvepackagenotfound)

python - 结果为 append 到列表的多处理 for 循环

Python Tkinter 多处理进展

python - .plot() 命令不显示任何内容