在我們?nèi)粘5拈_發(fā)中,開發(fā)效率非常重要,它可以直接影響我們的工作時(shí)間。如果運(yùn)行速度快,我們可能在半天時(shí)間里完成指定的工作,而Python在運(yùn)行速度方面沒有C或Java。很快,但Python正在慢慢改進(jìn)。本文將向您說明如何改進(jìn),請參閱以下內(nèi)容:
PYPY:PyPy是使用率較高的一種,并且與現(xiàn)有的Python代碼高度兼容。它使用及時(shí)編譯來加速Python,并集成了Numpy。之前已經(jīng)使用Numpy來加速Python的操作。使用Python3的代碼需要相應(yīng)地使用PyPy3。PyPy目前僅支持Python3.2.5,對Python3.3的支持正在進(jìn)行中。
Pyston:它使用LLVM編譯器架構(gòu)來加速Python,它也使用即時(shí)編譯。與PyPy相比,Pyston仍處于早期階段,僅支持Python的部分功能。Pyston將工作分為兩部分,一是語言的核心特性,二是將性能提升到可接受的水平。Pyston距離能夠在生產(chǎn)環(huán)境中使用還有很長的路要走。
Nuitka:一些團(tuán)隊(duì)嘗試將Python代碼轉(zhuǎn)換為其他語言的代碼,可以在本地高效運(yùn)行。著名的項(xiàng)目之一是Nuitka將Python代碼轉(zhuǎn)換為C++代碼,盡管運(yùn)行時(shí)仍然依賴于Python運(yùn)行時(shí)。這限制了它的便攜性,但性能提升是可觀的。在長期計(jì)劃中,Nuitka還計(jì)劃允許C語言調(diào)用Nuitka編譯的Python代碼,這樣性能提升會(huì)更加明顯。
Cypython:Cython(Python的C語言擴(kuò)展)是Python的超集。它可以將Python代碼編譯成C代碼,并與C和C++進(jìn)行交互。它可以作為Python項(xiàng)目的擴(kuò)展(重新性能要求),也可以單獨(dú)使用,不涉及傳統(tǒng)的Python代碼。缺點(diǎn)是你不是在寫Python,需要手動(dòng)遷移,缺乏可移植性。
Numba:Numba結(jié)合了上述項(xiàng)目的思想。在學(xué)習(xí)了Cython之后,Numba也采用了部分加速策略,只對CPU密集型任務(wù)進(jìn)行加速;同時(shí)也學(xué)習(xí)了PyPy和Pyston,通過LLVM運(yùn)行Python。你可以使用裝飾器來指定要使用Numba編譯的函數(shù),Numba繼承了Numpy來加速函數(shù)的執(zhí)行。Numba沒有及時(shí)編譯,它的代碼是預(yù)編譯的。