1. 性能分析與瓶頸定位
在優化前,需先通過工具定位代碼瓶頸。常用工具包括:
python -m cProfile -o output.prof your_script.py
),可通過pstats
模塊或snakeviz
可視化查看熱點函數;pip install line_profiler
,用kernprof -l -v your_script.py
運行),精準定位耗時行;pip install memory_profiler
,@profile
裝飾器標記函數,python -m memory_profiler your_script.py
),識別內存泄漏或高占用部分。2. 選擇更快的解釋器
sudo apt update && sudo apt install pypy3
,直接運行腳本pypy3 your_script.py
即可;@jit(nopython=True)
裝飾器加速函數(如from numba import jit; @jit(nopython=True) def func(): ...
)。3. 代碼邏輯優化
map()
、filter()
比自定義循環快);用集合(set
)代替列表(list
)做成員檢查(集合的哈希查找時間復雜度為O(1),列表為O(n));local_var = global_var
);(x for x in range(1000000))
)代替列表推導式([x for x in range(1000000)]
),節省內存(生成器按需生成數據,不一次性加載全部內容);join()
拼接字符串(比+
操作符更高效,如''.join(['a', 'b', 'c'])
)。4. 并行與并發處理
multiprocessing
模塊充分利用多核CPU(如from multiprocessing import Pool; with Pool(4) as p: results = p.map(square, range(10))
);threading
模塊(如import threading; def worker(): ...; threads = [threading.Thread(target=worker) for _ in range(5)]; [t.start() for t in threads]; [t.join() for t in threads]
);asyncio
庫(如import asyncio; async def worker(): await asyncio.sleep(1); async def main(): await asyncio.gather(*[worker() for _ in range(10)]); asyncio.run(main())
),避免線程阻塞。5. 使用高性能庫
NumPy
替代原生列表(NumPy
的數組操作基于C實現,速度快),如import numpy as np; result = np.sum(np.arange(1000000)**2)
(比原生Python循環快數十倍);Pandas
的高效數據結構(如DataFrame
、Series
),優化數據篩選、聚合等操作;Cython
將Python代碼編譯為C(如創建.pyx
文件,編寫def sum_of_squares(int n): cdef int i, result = 0; for i in range(n): result += i*i; return result
,再用setup.py
編譯),顯著提升性能。6. 緩存機制
functools.lru_cache
裝飾器緩存結果(如from functools import lru_cache; @lru_cache(maxsize=None) def fibonacci(n): return n if n < 2 else fibonacci(n-1)+fibonacci(n-2)
),避免重復計算;functools.lru_cache
或第三方庫(如cachetools
)緩存,減少數據庫或文件讀取次數。7. 系統級優化
ext4
或XFS
文件系統(支持更快的寫入和讀?。?,并通過tune2fs
調整參數(如增大inode緩存);