升級Python版本:CentOS 7默認的Python 2.7性能落后于Python 3.x(如3.8+),新版本對語法、庫和性能進行了優化??墒褂?code>pyenv或conda
管理多版本Python,避免破壞系統默認環境。
使用虛擬環境:通過virtualenv
或venv
創建隔離環境,避免全局包沖突,便于針對項目優化依賴版本(如指定高性能庫的版本)。
安裝編譯工具:編譯Python或C擴展時,需安裝gcc
、make
、openssl-devel
等工具,確保能安裝優化后的庫(如numpy
的C擴展)。
調整系統配置:
free -m
監控內存,優化Swap使用(如增大Swap分區或調整swappiness
值);noatime
,減少文件訪問時間記錄);top
/htop
監控CPU,通過nice
/renice
調整進程優先級,避免CPU過度占用。使用性能分析工具定位瓶頸:
cProfile
(內置)分析函數調用耗時:python -m cProfile -s cumtime your_script.py
;py-spy
(采樣探查器)實時查看熱點代碼:py-spy top --pid <PID>
;line_profiler
逐行分析代碼性能(需安裝pip install line_profiler
)。dict
)代替列表查找(時間復雜度從O(n)降至O(1));for
循環(如[x*2 for x in range(10)]
比循環更快);yield
)處理大數據集,減少內存占用(如yield x**2
比生成完整列表更高效)。from module import func
,而非module.func
);functools.lru_cache
存儲重復計算結果)。多進程處理CPU密集型任務:使用multiprocessing
模塊(如Pool
)利用多核CPU,避免GIL(全局解釋器鎖)限制。示例:
from multiprocessing import Pool
def task(x):
return x * x
with Pool(4) as p: # 4個進程
results = p.map(task, range(10))
異步編程處理I/O密集型任務:使用asyncio
或aiohttp
庫,通過協程實現高并發(如異步HTTP請求、數據庫查詢)。示例:
import asyncio
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def main():
urls = ['http://example.com'] * 10
tasks = [fetch(url) for url in urls]
await asyncio.gather(*tasks)
asyncio.run(main())
線程池處理輕量級I/O任務:使用concurrent.futures.ThreadPoolExecutor
(如處理多個文件讀寫),但需注意GIL對CPU密集型任務的限制。
JIT編譯器加速:
PyPy
(帶JIT的Python實現)替代CPython,對循環和數值計算有顯著提升(如運行pypy your_script.py
);Numba
(針對數值計算的JIT庫)編譯關鍵函數,通過@numba.jit
裝飾器將代碼轉為機器碼(如@numba.jit(nopython=True) def my_func(x): return x + 1
)。Cython
將Python代碼轉為C代碼(如添加類型注解cdef int x
),提升執行速度;Boost.Python
或ctypes
調用C++/C庫(如OpenCV、TensorFlow的C接口),利用C的高效性。NumPy
/Pandas
(底層用C實現,比純Python快數倍);SQLAlchemy
(ORM優化)或直接使用psycopg2
(PostgreSQL驅動);Redis
/Memcached
(減少數據庫查詢次數)。持續監控性能:
Glances
(命令行工具)監控系統資源(CPU、內存、磁盤、網絡);Prometheus
+Grafana
搭建可視化監控系統,收集Python應用的指標(如請求延遲、內存使用);linux-dash
(Web dashboard)實時查看系統狀態。timeit
模塊測量代碼執行時間(如python -m timeit -n 1000 -r 5 'sum(range(1000))'
),量化優化效果。