为什么python3需要加载python2的两倍?

时间:2015-01-13 23:36:43

标签: python performance python-2.7 python-3.x

我支持python2和python3上的项目,并注意到python3解释器加载的时间几乎是python2解释器的3倍。

(在Arch Linux上运行)

$ cat hello.py
print('Hello World!')
$ python -V
Python 3.4.2
$ time python hello.py
Hello World!

real    0m1.561s
user    0m1.290s
sys     0m0.110s
$ python2 -V
Python 2.7.9
$ time python2 hello.py
Hello World!

real    0m0.613s
user    0m0.513s
sys     0m0.070s

再一次没有代码:

$ rm foo ; touch foo ; time python foo ; time python2 foo

real    0m1.710s
user    0m1.297s
sys     0m0.103s

real    0m1.040s
user    0m0.667s
sys     0m0.100s
$ echo $PYTHONSTARTUP

$ rm foo ; touch foo ; time python -B foo ; time python2 -B foo

real    0m1.554s
user    0m1.117s
sys     0m0.123s

real    0m0.678s
user    0m0.557s
sys     0m0.090s

这里发生了什么?

2 个答案:

答案 0 :(得分:1)

尝试通过将-S传递给python来禁用“local site libraries”。当我使用速度较慢的ARM盒子时,传递这一点对我来说明显加快了速度。例如,我得到:

time python3 -S -c pass

在约0.076秒内运行,挂钟时间,而香草:

time python3 -c pass

需要0.247秒。将此选项传递给python2会在各种发行版中为我带来类似的加速,所以即使这样也无法解释差异 - 只是解决其中一些问题的方法!

希望你不介意我复活这个帖子;谷歌指出了我,我希望得到一个有用的答案。

答案 1 :(得分:0)

您所看到的启动时间与我在系统上看到的启动时间明显不同:

$ touch py
$ python3 py
$ time python3 py

real    0m0.027s
user    0m0.019s
sys 0m0.006s

$ python3 -V
Python 3.4.2

$ time python py

real    0m0.023s
user    0m0.013s
sys 0m0.008s

$ python -V
Python 2.7.8

我看到python3略有增加,但没有像你看到的那样增加1秒。我可以想到有两个可能导致差异的原因。首先,您可能在解释器加载时执行python启动文件。

$ echo $PYTHONSTARTUP
~/.pythonrc

检查是否为python3加载了启动文件,但是没有为python2加载。

另外,尝试运行测试而不编写字节码:

time python -B foo

这可能是您的设置本地的环境问题,而不是解释器版本之间的主要区别。