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高性能編程》