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