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缓存);