python笔记-python编程优化:常用原则和技术介绍
本人翻譯自《Exper Python Programming》
'Premature optimization is the root of all evil in programming' -Donald Knuth
?
? ?優(yōu)化的三原則 ? ??
- 讓它跑起來先
一個非常常見的錯誤就是在編寫代碼之初我們就開始對代碼進(jìn)行優(yōu)化。讓人傷心的是這通常做的都是無用功,很多軟件只有你跑起來了才會發(fā)現(xiàn)它真正的瓶頸在哪里。
- 站在用戶的視角看問題
曾經(jīng)有一個團(tuán)隊為了自己的項目跑起來更快加班加點最終達(dá)到了自己滿意的效果,最終交付到客戶那里,結(jié)果發(fā)現(xiàn)客戶并不覺得跑得快對他有什么好處。。。
- 始終保持代碼可讀(可維護(hù))
如果當(dāng)你已經(jīng)完成了90%的優(yōu)化任務(wù),而剩下10%的優(yōu)化任務(wù)可能會使你的代碼完全的不可讀,那這個時候你最好可以停止你的優(yōu)化工作了。
?
? ?優(yōu)化的策略 ? ? ?
- 去找別人的問題
通常情況下我們的軟件測試不可能做到100%的模擬真實環(huán)境。當(dāng)客戶向我們抱怨軟件運(yùn)行速度不如從前時,我們不妨找找是不是因為在和別的應(yīng)用進(jìn)行交互時候,其他應(yīng)用造成的速度問題。
- 刷硬件
這個大家都好懂,跑的慢?先看看是不是你配置不夠啊,不夠就買買買!
- 編寫一個速度測試文檔
當(dāng)我們開始優(yōu)化工作的時候,我們不妨在我們的目標(biāo)函數(shù)下面寫一條注釋“該函數(shù)運(yùn)行時間不能超過1秒”
?
? ?尋找瓶頸 ? ? ? ?
- 查看CPU使用率
從CPU的角度來看呢,又分為宏觀查找和微觀查找。這里最常用的是cProfile,它是一個c語言的庫,提供對程序資源使用的監(jiān)控還有時間的記錄。具體的使用方法可以點這里。
- 查看內(nèi)存使用率
既然說的是python,我們也就不得不提到python的內(nèi)存分配機(jī)制,不像c語言那樣,我們可以使用一個函數(shù)就知道當(dāng)前變量的內(nèi)存分配情況,而在python中我們是絕不會知道某個變量當(dāng)前分配了多少內(nèi)存空間的。。通常情況下,消耗內(nèi)存空間的原因有:1.某個變量不受控制的增長;2.在全局有太多的實例,而且沒有監(jiān)控他們對內(nèi)存的使用;3.沒有正確關(guān)閉的線程;4.有__del__屬性的對象在一個循環(huán)體內(nèi)
具體的內(nèi)存檢測工具有:Guppy、Heapy
- 查看網(wǎng)絡(luò)使用率?
這一部分的話我們使用通用的網(wǎng)絡(luò)監(jiān)測工具就好了。
? ?降低代碼復(fù)雜度 ???
? 兩個維度:
- 測量分支復(fù)雜度:程序中ifelse語句的分支有多少
- 測量時間空間復(fù)雜度
?
最后兩個大主題是:多線程和緩存。這兩個方法也是非常重要的優(yōu)化程序的方法,先寫到這里,看完繼續(xù)更。
轉(zhuǎn)載于:https://www.cnblogs.com/Blaxon/p/4827007.html
總結(jié)
以上是生活随笔為你收集整理的python笔记-python编程优化:常用原则和技术介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python模拟Linux的Cronta
- 下一篇: 跟一个傻逼程序员合作是什么感受?