python深入系列(四):高性能python代碼

1、性能分析工具

cProfile、hotshot、profile、runsnake(可視化cProfile分析結(jié)果)、line_profiler(逐行分析)、memory_profiler(診斷內(nèi)存,安裝psutil可提速,mprof功能可用于采樣畫圖)、heapy(分析堆占用,處理內(nèi)存泄漏)、dowser(實(shí)時畫出變量實(shí)例)、dozer、dis(檢查字節(jié)碼,字節(jié)碼越多執(zhí)行越慢)、coverage.py(測試代碼覆蓋率)、perf(linux內(nèi)存工具)、GIL可視化

2、元組列表字典集合優(yōu)化

  • 使用bisect模塊
  • 使用內(nèi)部tim排序
  • 元組緩存于運(yùn)行時環(huán)境,不需要分配內(nèi)存
  • 元組要比列表創(chuàng)建快得多,因?yàn)椴挥迷L問操作系統(tǒng)
  • 字典需要更多的內(nèi)存,而且性能依賴于散列函數(shù)
  • 集合內(nèi)部也使用散列表,add操作為O(1)
  • 字典或集合初始最小長度為8,然后以4倍增長,到50000時以2倍增長

3、迭代器和生成器

  • for循環(huán)內(nèi)部是迭代器
  • 沒特殊情況多用迭代器和生成器,性能略好內(nèi)存更少,且可兼容多CPU或計算機(jī)場景
  • 內(nèi)存分配并不便宜,重用已分配的內(nèi)存可提升速度
  • 矢量化操作時使用numpy效率可提高幾十倍(內(nèi)存本地化、連續(xù)化)

4、并發(fā)編程

  • 使用gevent、tornado、asyncio實(shí)現(xiàn)異步IO,特殊情況下會有幾十倍的提升

(持續(xù)更新......)

——————————————————————————————

  • 注:參考《python高性能編程》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容