摘要:但是由于程序并沒有那么快,開發(fā)人員多年來創(chuàng)建了幾個的編譯器,包括和。在下面的細(xì)分中,所有的編譯器都針對進行基準(zhǔn)測試。編譯器是系列的一部分,旨在作為的現(xiàn)代替代品。不僅僅是的編譯器,它是的超集,支持與的互操作性。
簡評:Python 和其他的解釋型語言一樣經(jīng)常被吐槽性能不行,所以開發(fā)人員為了提升性能創(chuàng)建了不少編譯器,本文則選取其中的四個做了基準(zhǔn)測試。
Python 其實是一種相當(dāng)快的語言,但它并不像編譯型語言那么快。 這是因為官方實現(xiàn)的 CPython 解釋執(zhí)行的,更準(zhǔn)確地說,是 Python 代碼被編譯為字節(jié)碼,然后進行解釋。這對學(xué)習(xí)是很有好處的,因為可以在 Python REPL 中運行代碼并立即查看結(jié)果,而不必編譯和執(zhí)行。 但是由于 Python 程序并沒有那么快,開發(fā)人員多年來創(chuàng)建了幾個 Python 的編譯器,包括 IronPython 和 Jython。
快速的性能并不是編譯的唯一原因,可能諸如 Python 之類的腳本語言最大的缺點是你需要隱式地向客戶提供源代碼。
我想比較同一平臺上的一些 Python 編譯器,特別是那些支持 Python 3.x 的編譯器。最后,我選擇了四個,都在 Ubuntu Linux上運行,他們是 Nuitka,PyPy,Cython 和 cx_Freeze。
比較 Python 編譯器
有人已經(jīng)完成了創(chuàng)建 Python 基準(zhǔn)測試的工作。我選擇了 PyStone,這是 Python 的創(chuàng)建者Guido van Rossum 對 C 程序的翻譯(而 C 程序本身是 Ada 程序的翻譯)。 我在 GitHub 上找到了開發(fā)人員 Christopher Arndt 的轉(zhuǎn)換版本,它能夠兼容 Python 3。 下面是 Pystone 的CPython(即標(biāo)準(zhǔn) Python)性能:
Python 2.7.15Rc1 2 : 272,647 pystones/second. Python 3.6.5 : 175,817
正如你所看到的,Python 2 和 Python 3 之間有很大的區(qū)別(每秒 Pystones 越多越好)。在下面的細(xì)分中,所有的 Python 編譯器都針對 Python 3 進行基準(zhǔn)測試。
Nuitka
盡管可以按照下載頁面上的說明操作,但 Ubuntu 上的只需:
$ sudo apt install Nuitka
Nuitka 還需要一個 C 編譯器,所以我下載了 clang。可以使用以下方法安裝它:
$ sudo apt install clang
Nuitka 默認(rèn)使用 gcc,但是一個參數(shù)允許你使用 clang,所以我用兩者測試了它。 clang 編譯器是 llvm 系列的一部分,旨在作為 gcc 的現(xiàn)代替代品。使用 gcc 編譯 pystone.py 就像這個(第一行)一樣簡單,或者使用 clang(第二行),并使用鏈接時間優(yōu)化 gcc(第三行):
$ nuitka pystone.py $ nuitka pystone.py --clang $ nuitka pystone.py --lto
編譯(大約 10 秒鐘)完成后,我從終端運行了 pystone:
$ ./pystone.exe 500000
結(jié)果是
Size Execution pystones/sec 1. 223.176 Kb 597,000 2. 195,424 Kb 610,000 3. 194.2 kb 600,000
這些是 5 次運行的平均值,我盡可能多地關(guān)閉了進程。
PyPy
Guido van Rossum 曾經(jīng)說過:「如果你希望你的代碼運行得更快,你應(yīng)該只使用PyPy。」我將編譯好的二進制文件下載到一個文件夾中,并將 pystone.py 復(fù)制到其下的 bin 文件夾中。然后我像這樣運行:
$ ./pypy3.5 pystone.py
結(jié)果是驚人的 1,776,001 pystones/sec,幾乎是 Nuitka 的三倍。
PyPy 使用即時編譯器并做了一些非常巧妙的東西來實現(xiàn)它的速度。根據(jù)基準(zhǔn)測試的報告,它平均比 CPython 快 7.6 倍。 我很容易相信。 唯一(輕微)的缺點是它總是落后于 Python 版本。
生成一個 EXE 需要一些工作,你必須將你的 Python 編寫成一個名為 RPython 的子集。
Cython
Cython 不僅僅是 Python 的編譯器,它是 Python 的超集,支持與 C / C++ 的互操作性。 CPython是用 C 編寫的,所以它是一種通常可以很好地與 Python 混編的語言。
使用 Cython 進行設(shè)置有點繁瑣,它不像 Nuitka 那樣開箱即用。首先,必須從擴展名為 .pyx的 Python 文件開始,你運行 Cython 來創(chuàng)建一個 pystone.c 文件:
$ cython pystone.pyx --embed
不要忽略 –embed 參數(shù),接下來,你用這條命令編譯 pystone.c:
$ gcc $(python3-config --includes) pystone.c -lpython3.6m -o pystone.exe
如果遇到任何錯誤,例如「找不到 -lpython 版本」,則可能是因為你的 Python 版本。要查看安裝的版本,請運行以下命令:
$ pkg-config --cflags python3
畢竟,Cython 只給出 228,527 pystones/sec,但是,Cython 需要你做一些指定變量類型的工作。Python 是一種動態(tài)語言,因此沒有指定類型, Cython 使用靜態(tài)編譯,使用 C 類型變量可以產(chǎn)生更好的優(yōu)化代碼。 (文檔相當(dāng)廣泛,需要閱讀。)
Size Execution pystones/sec 1. 219,552 Kb 228,527 cx_freeze
這是一套用于將 Python 腳本「凍結(jié)」為可執(zhí)行文件的腳本和模塊,可以在GitHub上找到。我安裝了它并創(chuàng)建了一個凍結(jié)文件夾來管理內(nèi)容:
$ sudo pip3 install cx_Freeze --upgrade
我在安裝腳本中發(fā)現(xiàn)的一個問題是缺少“l(fā)z”的錯誤。你需要安裝 zlib 運行它來安裝它:
$ sudo apt install zlib1g-dev
之后,cx_Freeze 命令使用 pystone.py 腳本創(chuàng)建了一個 dist 文件夾,其中包含一個 lib 文件夾,一個 5MB 的 lib 文件和 pystone 應(yīng)用程序文件:
$ cxfreeze pystone.py --target-dir dist Size Execution pystones/sec 1. 10,216 174,822
不是最快的性能,因為它與 CPython 的速度相同。 (Python 凍結(jié)包括將應(yīng)用程序與所需的Python 元素一起放在單個文件(或文件夾)中,而不是編譯,這意味著目標(biāo)不需要Python。)
結(jié)論
我對 PyPy 的表現(xiàn)感到敬畏,編譯非常快,在按下回車鍵后不到一秒就產(chǎn)生了結(jié)果。 如果你想要一個 exe,我推薦 Nuitka,這是一個不費吹灰之力的編譯,運行速度比 CPython 快。你也可以自己試用這些 Python 編譯器,看看哪種方法最適合特定需求。
原文:4 Fast Python Compilers for 2018
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42051.html
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:通過本文的學(xué)習(xí),可以快速掌握網(wǎng)絡(luò)爬蟲基礎(chǔ),結(jié)合實戰(zhàn)練習(xí),寫出一些簡單的爬蟲項目。從技術(shù)手段來說,網(wǎng)絡(luò)爬蟲有多種實現(xiàn)方案,如。二網(wǎng)絡(luò)爬蟲技術(shù)基礎(chǔ)在本次課中,將使用技術(shù)手段進行項目的編寫。 摘要:本文詳細(xì)講解了python網(wǎng)絡(luò)爬蟲,并介紹抓包分析等技術(shù),實戰(zhàn)訓(xùn)練三個網(wǎng)絡(luò)爬蟲案例,并簡單補充了常見的反爬策略與反爬攻克手段。通過本文的學(xué)習(xí),可以快速掌握網(wǎng)絡(luò)爬蟲基礎(chǔ),結(jié)合實戰(zhàn)練習(xí),寫出一些簡單的...
摘要:年月宣布支持時間延長到年。更詳細(xì)的發(fā)布列表參閱官網(wǎng)的版本號分為三段,形如。其中表示大版本號,一般當(dāng)整體重寫,或出現(xiàn)不向后兼容的改變時,增加表示功能更新,出現(xiàn)新功能時增加表示小的改動如修復(fù)了某個,只要有修改就增加。年公司正式發(fā)布。 < 返回索引頁 Python語言簡介 Python介紹及發(fā)展 介紹 Python 官方網(wǎng)站:https://www.python.org/, 大家可以到此處下...
閱讀 1123·2021-11-08 13:13
閱讀 1707·2019-08-30 15:55
閱讀 2761·2019-08-29 11:26
閱讀 2426·2019-08-26 13:56
閱讀 2549·2019-08-26 12:15
閱讀 2125·2019-08-26 11:41
閱讀 1394·2019-08-26 11:00
閱讀 1530·2019-08-23 18:30