升级Python版本:CentOS 7默认的Python 2.7性能落后于Python 3.x(如3.8+),新版本对语法、库和性能进行了优化。可使用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))'),量化优化效果。