我最喜歡Python的一點(diǎn)就是它可以讓你一步一步地優(yōu)化你的代碼。比如說你有一個(gè)Python方法,你發(fā)現(xiàn)它是你項(xiàng)目中的瓶頸。你已經(jīng)對(duì)其優(yōu)化了數(shù)次,可能是遵循了這里或這里的意見,現(xiàn)在你確定Python本身是你應(yīng)用的瓶頸所在。
Python是能夠直接調(diào)用C代碼的,這就意味著你可以用C重寫這個(gè)方法來減少性能問題。你可以一個(gè)一個(gè)地進(jìn)行替換。這個(gè)過程能讓你調(diào)用任何最終編譯成C兼容指令的優(yōu)化的代碼,也讓你能在大部分情況下繼續(xù)使用Python,而只在真正需要的時(shí)候深入底層進(jìn)行開發(fā)。
有一個(gè)叫Cython的語言,它是Python的超集。幾乎是Python和C的結(jié)合體,同時(shí)它是漸進(jìn)的類型化語言。任何Python代碼都是合法的Cython代碼,Cython會(huì)將代碼編譯成C代碼。有了Cython,你可以編寫模塊或方法,漸漸地引入C語言的類型和性能。你可以混合使用C語言的類型和Python的鴨子類型(ducktype)。通過Cython你可以只在瓶頸處進(jìn)行調(diào)優(yōu),而在其他地方仍然使用優(yōu)美的Python語言,兩者能完美地結(jié)合。
使用Python編寫的太空大規(guī)模多人在線游戲EVEOnline的截圖
當(dāng)你最終遇到了Python的性能瓶頸,你不需要將你所有代碼移植到其他語言。你總是可以使用Cython重寫部分方法來滿足性能上的需求。這也是游戲EVEOnline所采用的策略。Eve是一個(gè)大型多人在線電腦游戲,它完全使用Python和Cython開發(fā)。游戲開發(fā)人員通過在C/Cython中調(diào)優(yōu)瓶頸來達(dá)到游戲級(jí)的性能要求。如果游戲都能達(dá)到性能上的需求,那么大部分情況都應(yīng)該可以滿足。
此外,還有其他方法來優(yōu)化你的Python程序。例如PyPy是一個(gè)Python的運(yùn)行時(shí)編譯執(zhí)行(JIT)的實(shí)現(xiàn),只需要使用PyPy切換默認(rèn)的Cython,就可以顯著地提升你長(zhǎng)時(shí)間運(yùn)行應(yīng)用的運(yùn)行時(shí)性能,如在網(wǎng)絡(luò)服務(wù)器上。
讓我們回顧一下文中的要點(diǎn):
優(yōu)化你最昂貴的資源。也就是你自己,而不是電腦。
選擇可以有助于快速開發(fā)的語言、框架、架構(gòu),例如Python。不要只因?yàn)檫\(yùn)行速度快而選擇某個(gè)技術(shù)。
當(dāng)你的應(yīng)用有性能問題時(shí),找出你應(yīng)用中性能的瓶頸。
你的瓶頸通常不是CPU或Python本身。
如果你已經(jīng)優(yōu)化了算法或其他方面,確定Python的確是你項(xiàng)目的瓶頸,那么可以將這個(gè)熱點(diǎn)移到Cython/C中進(jìn)行改寫。
接下來就坐下來享受快速編碼的樂趣吧。
以上內(nèi)容為大家介紹了如何優(yōu)化Python,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://m.2667701.com/