【发布时间】:2017-08-31 02:58:01
【问题描述】:
我们已将 Python 2 用于我们目前在 Raspberry Pi 上进行原型设计的嵌入式应用程序。这有点慢,但可以接受。
现在我们已将应用程序移植到 Python 3。但由于某种原因,应用程序的运行速度比 Python 2 慢 4 倍!我原以为 Python 3 会慢一点,但没有这样的!
我们的 Linux 发行版基于 Yocto 2.2 Morty,我们使用默认的 Python 3.5.2 配方,没有进行任何自定义。我们还使用 meta-raspberrypi 层来实现 Raspberry 兼容性。
我尝试对“pip3 --help”进行计时,结果如下:
$ time pip3 --help >/dev/null
real 0m22.686s
user 0m22.210s
sys 0m0.420s
然后我使用最新的 Raspbian 发行版在相同的硬件(同样的 sd 卡)上尝试了相同的测试:
$ time pip3 --help >/dev/null
real 0m6.874s
user 0m6.530s
sys 0m0.310s
$ time pip --help >/dev/null
real 0m4.329s
user 0m4.000s
sys 0m0.300s
Python 2 pip 比 Python 3 快一点,但最重要的是 pip3 在 Raspbian 上的运行速度比在 Yocto 上快 3 倍以上!
测试是非常可重复的,所以它们不是由 pyc 生成或缓存或类似的东西引起的。
任何想法如何让 Yocto 和 Raspbian 一样快?
更新:
下面在 Raspbian vs Yocto 中有一些关于 Python 和 Pip 不同版本的讨论,所以我只使用 Python 标准库做了一个新的基准测试:
Yocto 2.2 莫蒂:
sh-4.3# time python3 --version
Python 3.5.2
real 0m0.024s
user 0m0.010s
sys 0m0.000s
sh-4.3# time python3 -c "import asyncio"
real 0m3.439s
user 0m3.300s
sys 0m0.110s
Raspbian:
pi@raspberrypi:~$ time python3 --version
Python 3.4.2
real 0m0.020s
user 0m0.000s
sys 0m0.010s
pi@raspberrypi:~$ time python3 -c "import asyncio"
real 0m2.023s
user 0m1.850s
sys 0m0.160s
然后我在 Raspbian 上下载了 Python 3.5.2 并从源代码构建它,没有自定义配置 (./configure; make; make install)。使用 Python 3.5.2 我得到以下结果:
pi@raspberrypi:~$ time python3.5 --version
Python 3.5.2
real 0m0.018s
user 0m0.000s
sys 0m0.010s
pi@raspberrypi:~$ time python3.5 -c "import asyncio"
real 0m2.689s
user 0m2.610s
sys 0m0.070s
因此,Python 3.5 似乎比 3.4 慢得多,但在默认的 Yocto 构建上仍然比在默认构建配置的 Raspbian 上慢得多。
更新 2:
我在 Yocto 系统上以相同的方式构建了 Python 3.5.2(“./configure; make; make install”),与标准 Python 配方相比,得到了大约 20% 的改进:
root@la:/var/src/Python-3.5.2# time python3.5 -c "import asyncio"
real 0m2.914s
user 0m2.750s
sys 0m0.130s
【问题讨论】:
-
你能指定python(s)、pip(s)和yocto的版本吗?你提到了 yocto 2.0 和 python 3.5.2 但这些版本不匹配......
-
作为参考,我在 qemu 中的 yocto 构建中尝试了 pip 和 pip3:它们的速度差不多,但启动起来确实很慢——大约 10 秒打印版本字符串。
-
@jku 你是对的,我是从我的脑海中挑选出来的,显然有错误的 yocto 版本。这是 Yocto 2.2 莫蒂。 pip3 版本是 8.1.2。 Python 是 3.5.2 版。
-
另外,我应该注意到我没有在这个 Yocto 版本上使用 Python 2 进行测试。上一次我们用 Python 2 编写的应用程序构建发行版是接近一年前,所以这就是我要比较的。不幸的是,我什至没有安装 pip2,但如果有帮助的话,我可以在下一个版本中添加它以进行比较。
-
raspbian python3 和 pip3 版本是否与您的 yocto 版本相似?如果是,那么可能值得在 bugzilla.yoctoproject.org 上提交一个错误
标签: python python-3.x raspberry-pi raspbian yocto