Ubuntu下优化Python性能的系统性方法
优化前需精准识别性能瓶颈,避免盲目修改。常用工具包括:
python -m cProfile -o output.prof your_script.py运行,再用snakeviz output.prof可视化分析。pip install line_profiler,通过@profile装饰器标记目标函数,用kernprof -l -v your_script.py运行。@profile装饰器标记函数,生成内存占用报告。sudo apt update && sudo apt install pypy3,直接运行脚本pypy3 your_script.py即可。@jit(nopython=True)装饰器将Python函数编译为机器码,特别适合数组运算(如NumPy操作)。map()、filter())和标准库(如collections.deque替代列表实现队列),其底层由C实现,性能更优。(x*x for x in range(1000)))替代列表推导式,节省内存(生成器按需生成值,不一次性加载全部数据)。''.join(list)替代+连接字符串(+会生成多个临时字符串对象),提升拼接效率。multiprocessing.Pool创建进程池,充分利用多核CPU。示例:with Pool(4) as p: results = p.map(square, range(1000))。threading.Thread创建线程,避免GIL(全局解释器锁)限制。asyncio库实现协程,提升吞吐量。示例:async def fetch(url): ...; await asyncio.gather(*tasks)。.pyx文件(如sum_of_squares.pyx),创建setup.py(from setuptools import setup; from Cython.Build import cythonize; setup(ext_modules=cythonize("sum_of_squares.pyx"))),运行python setup.py build_ext --inplace生成.so文件,再导入使用。example.c),通过gcc编译为.so文件,用ctypes或cffi调用。适合性能关键的核心逻辑。ndarray)和数学函数,比纯Python列表快数十倍。示例:np.sum(np.arange(n)**2)替代sum(i*i for i in range(n))。DataFrame等高效数据结构,优化了数据筛选、聚合等操作。SciPy(科学计算)、TensorFlow/PyTorch(深度学习),均针对特定场景进行了性能优化。arr.view(np.int32)),减少内存占用。gc模块手动控制垃圾回收(如gc.disable()临时关闭,处理完大批量数据后再开启),减少GC带来的停顿。sudo swapon -s查看,sudo fallocate -l 2G /swapfile创建)。functools.lru_cache装饰器缓存(如斐波那契数列@lru_cache(maxsize=None)),避免重复计算。per-interpreter GIL提升多线程性能),确保使用最新稳定版。venv或virtualenv创建隔离环境,避免全局包冲突,同时便于管理依赖版本(如指定numpy==1.24.0)。def add(a: int, b: int) -> int:),配合mypy进行静态类型检查,提前发现潜在的性能问题(如错误的类型转换)。