pypy提升python項目性能使用詳解
一、PyPy介紹
PyPy是用Python實現(xiàn)的Python解釋器的動態(tài)編譯器,是Armin Rigo開發(fā)的產(chǎn)品,能夠提升我們python項目的運行速度。PyPy 是利用即時編譯的 Python 的替代實現(xiàn)。
背后的原理是 PyPy 開始時就像一個解釋器,直接從源文件運行我們的 Python 代碼。但是,PyPy 不是逐行運行代碼,而是在執(zhí)行它們之前將部分代碼編譯為機器代碼。
根據(jù)官方文檔的介紹可以看到,平均下來PyPy比CPython(也就是我們主流使用的python)快4.5倍:
PyPy除了速度快外,還有下面一些特點:
- 內(nèi)存使用情況比cpython少
- gc策略更優(yōu)化
- Stackless 協(xié)程模式默認(rèn)支持,支持高并發(fā)
- 兼容性好,高度兼容cpython實現(xiàn),基本可以無縫切換
- PyPy為許多平臺和操作系統(tǒng)提供預(yù)編譯的二進制文件:
二、PyPy安裝
我們直接訪問下載地址:www.pypy.org/download.ht… 下載對應(yīng)的包使用即可。
下載完成后解壓到任意目錄然后加入到環(huán)境變量中:
然后在控制臺中執(zhí)行pypy
就可以開始使用它了:
三、PyPy和Python測試對比
我們可以通過一個簡單的腳本來測試一下它們之間的性能差異,下面是一個循環(huán)3千萬次的累乘計算:
import datetime x = 0 start_time = datetime.datetime.now() for i in range(30000000): x += i * i print('耗時:', datetime.datetime.now() - start_time)
測試結(jié)果
python耗時: 0:00:03.357052
pypy耗時: 0:00:00.761932
可以看到有近4.5倍的性能差距,這也符合PyPy官網(wǎng)介紹的。
四、PyPy注意事項
經(jīng)過測試PyPy也有一些庫是不支持的:
- pyinstrument
- sshtunnel
這只是我經(jīng)常使用的一些庫中發(fā)現(xiàn)不支持的庫,但絕大部分的庫都是支持的,比如Django、requests、pymysql
等。
另外,對于諸如numpy
、pandas
這類本身就是C語言開發(fā)的擴展時,PyPy的性能反而會更低,PyPy只對純Python庫有明顯的性能提升。
最后在你決定要使用PyPy時,你應(yīng)該思考你的項目是否有性能瓶頸,或者性能瓶頸是因為Python本身效率慢的問題。如果是后端接口項目(類似使用flask、django開發(fā)的后端)其性能瓶頸往往在SQL的執(zhí)行和代碼本身的邏輯問題上,而不是python執(zhí)行慢導(dǎo)致的。所以即便你使用了PyPy也大概率不能解決你的性能問題。
以上就是pypy提升python項目性能使用詳解的詳細(xì)內(nèi)容,更多關(guān)于python pypy項目性能提升的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python算法學(xué)習(xí)雙曲嵌入論文代碼實現(xiàn)數(shù)據(jù)集介紹
由于雙曲嵌入相關(guān)的文章已經(jīng)有了一系列的代碼。本篇博客主要目的實現(xiàn)最開始的雙曲嵌入論文,將論文中有些直接寫出來的內(nèi)容進行了細(xì)節(jié)的推導(dǎo),同時實現(xiàn)對應(yīng)的代碼2021-11-11Diango + uwsgi + nginx項目部署的全過程(可外網(wǎng)訪問)
這篇文章主要給大家介紹了關(guān)于Diango + uwsgi + nginx項目部署的全過程(可外網(wǎng)訪問),文中通過示例代碼將部署的過程介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04