不論什麼語言,咱們都須要注意性能優化問題,提升執行效率。選擇了腳本語言就要忍受其速度,這句話在某種程度上說明了Python做爲腳本語言的不足之處,那就是執行效率和性能不夠亮。儘管Python從未如C和Java通常快速,可是很多Python項目都處於開發語言領先位置。java
Python很簡單易用,但大多數人使用Python都知道在處理密集型cpu工做時,它的數量級依然低於C、Java和JavaScript。但很多第三方不肯贅述Python的優勢,而是決定自內而外提升其性能。若是你想讓Python在同一硬件上運行得更快,你有兩個基本選擇,而每一個都會有一個缺點:python
·您能夠建立一個默認運行時所使用的替代語言(CPython的實現)——一個主要的任務,但它最終只會是CPython的一個簡易替代者。git
·您也能夠利用某些速度優化器重寫現有Python代碼,這意味着程序員要花更多精力編寫代碼,但不須要在運行時加以改變。程序員
如何進行Python性能優化,是本文探討的主題。下面是五個方法能夠在某些方面提升Python代碼的性能和執行效率。github
PyPy編程
在選擇CPython的簡易替代語言時,PyPy無疑是最佳之選(如Quora就是由它編寫而成)。因爲與現有Python代碼保持高度兼容性,PyPy也是默認程序運行時的一個很好選擇。api
PyPy使用了Just-in-Time(JIT)即時編譯器,即動態編譯器,與靜態編譯器(如gcc,java等)不一樣,它是利用程序運行的過程的數據進行優化,擁有同谷歌Chrome V8 JavaScript引擎相同的語言加速技術。本月初,最新版本PyPy 2.5即將發佈,此版本會有一系列的性能改進,提供更全面的如NumPy的支持,用於加速Python性能的共享庫。性能優化
Python 3.x必須由單獨的PyPy3項目構建而成。不過,對於邊緣語言特性 愛好者來講,儘管預期支持3.3,但實際此版本最多僅支持Python3.2.4及如下版本。編程語言
相關連接:http://pypy.org/函數
Pyston
Pyston是一款Dropbox推出的新的基於JIT的Python實現,使用LLVM編譯器實現代碼解析與轉換。與PyPy相比,Pyston仍處於初級階段,目前最新版本爲Pyston 0.2版,支持有限子集語言的相關特性。Pyston的主要工做包括支持語言的核心功能及提高關鍵指標性能到一個可接受的水平。不久後,Pyston就能夠被認爲是遠程生產就緒語言。
相關連接:https://github.com/dropbox/pyston
Nuitka
Nuitka 是一個Python的替代品,一些團隊正用它作徹底的Python編譯工具,並嘗試將Python代碼轉譯爲其它可高速運行的編程語言。Nuitka(nuitka.net)能夠將python代碼轉換爲C++代碼,而後編譯爲可執行文件,並經過直接調用python的api的方式實現從解析語言到編譯語言的轉換,而且在轉換到C++的過程當中直接使用python的解釋器,能夠保證100%的語法兼容。雖然這限制了它的可移植性,但不能否認這個轉換的速度得到了確定。
相關連接:http://nuitka.net/
Cython
Cython是Python 的C語言擴展。準確說Cython是單獨的一門語言,專門用來寫在Python裏面import用的擴展庫。實際上Cython的語法基本上跟Python一致,而Cython有專門的編譯器:先將 Cython代碼轉變成C(自動加入了一大堆的C-Python API),而後使用C編譯器編譯出最終的Python可調用的模塊。不過Cython的缺點是,你並不能真正編寫Python代碼,這樣一來,現有代碼將不會徹底自動轉移成功。
也就是說,Cython在提速方面有很大優點,它是一個用來快速生成Python擴展模塊(extention module)的工具。而在Cython,C裏的類型,如int,float,long,char*等都會在必要的時候自動轉成python對象,或者從python對象轉成C類型,在轉換失敗時會拋出異常,這正是Cython最神奇的地方。另外,Cython對回調函數的支持也很好。總之,若是你有寫python擴展模塊的需求,那麼Cython真的是一個很好的工具。
相關連接:http://cython.org/
Numba
Numba綜合了前兩種方法,是Cython的競爭項目。一樣的,numba把Python源碼經過LLVMPy生成JIT後的.so文件來加速。不一樣點在於,Numba是以JIT爲主的,加速對源碼的侵入性較小。而Cython則重點在加速高性能Python模塊的開發上,不依賴LLVMPy項目。此外numba還很不成熟,目前兼容性至關差。
Python創始人Guido van Rossum堅信Python的許多性能問題能夠歸結爲語言的使用不當。例如,對於CPU消耗太高的處理,能夠經過一些方法來加速Python運行——使用NumPy、使用多處理器擴展、或藉助外部C代碼從而避免全局解釋器鎖(GIL)——Python緩慢的根源。但因爲在Python中尚未可行的GIL替代語言,Python仍將在短時間落後於其餘語言——甚至可能更長時間。
轉自IT168