【发布时间】:2021-02-17 18:38:09
【问题描述】:
例如,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中进行更深入的剖析?
【问题讨论】:
-
由于这不是一个详尽的分析,我建议您包括更多信息:至少
python -VV两者;最好是其他人可以复制的最小环境定义。 -
@merv 谢谢,你把我推向了解决方案!看来我的 conda 使用 python 3.8.5,而我的 python env 是 3.7.5。而且,根据源代码,multiprocessing/pool.py 中有一些变化。我使用与我的系统完全相同的 python 版本创建了 conda env,它们现在可以在相当的时间运行(conda 仍然稍微慢一点)。但我还是想知道,为什么python版本之间的速度差异如此之大?
标签: python anaconda multiprocessing profiling