標籤:

為什麼Pypy沒有被推廣以及取代CPython?

Pypy運行速度比CPython快得多


Python的應用範圍非常廣,至少要分為:科學計算、腳本運維、業務系統 三個方向。

其中科學計算主要依賴C擴展,而C擴展基本都是為CPython設計,PyPy不能很有效率地執行原生C擴展,對Python代碼的性能提升也沒有很關鍵的作用,因此這個領域主要還是CPython。

腳本運維的特點是對性能沒有很大需求,而且一般執行一次馬上退出,來不及JIT預熱,因此基於JIT的PyPy也沒有優勢,更不要說CPython是Linux發行版的一部分,使用原生Python非常簡單這件事了。

而對於純Python編寫的業務系統,比如Web網站等等,PyPy有很好的性能提升。這也是PyPy發展的主要的方向。


一,pypy的運行速度快也是有場景的,有的代碼會快很多,但有時候可能比cpy還慢點

二,就算在pypy有優勢的場景,也比不上C++和Java等(如果你代碼不太爛也沒觸及這些語言的性能坑)

三,就算性能優勢很大,用py的場景卻不一定需要這麼快,大部分腳本還不是用來做高密度計算的

四,py做計算密集的,一般也都有成熟的C擴展庫了,而pypy對這些庫反而支持力度很差,而且有段時間曾以支持numpy為由在主頁要捐款,當然這是正當行為,人家也不能免費勞動,不過這種舉動給人的感覺有點那個,總覺得有一種可能某天就突然不維護了的擔心

再說回性能,個人看法是對性能有要求的地方,一開始不要用py這類動態性極強的語言比較好,或者用了以後逐步重構為C擴展或其他語言的形式


如果是這樣,就反客為主了,pypy 是由cpython 開放的源碼發展起來的,也就是說 cpython 才是正統,所以 開發者 主要開發 cpython 可用的 庫,pypy與cPython的區別主要是它的兼容性,沒有人敢在生產環境上 用,自然慢慢用的人就少了,話說,pypy 運行速度 真不是蓋的


pypy最大的問題是對官方Python/C API 支持太差。因為官方的api沒有針對jit特別設計,pypy運行起來兼容性不好,包括對官方的ctypes庫支持也不好。pypy推薦使用cffi調用c/c++的共享庫,能夠更好的利用jit加速。

我最看好的還是微軟在搞的pyjion項目,是給cpython解釋器添加jit功能。

希望這個能搞成。


推薦閱讀:

for循環在Python中是怎麼工作的
回應「如何評價《python web開發實戰》?」的評價
國內有哪些 Django 牛人?
Python從零開始系列連載(12)——Python的基本運算和表達式(下)
為什麼感覺django裡面class based view很難呢?

TAG:Python | PyPy |