先用cProfile和snakeviz定位性能瓶颈,再针对性优化:字符串拼接用join、查找用set、小数据不用NumPy、减少全局变量访问;计算密集型用NumPy/多进程/Cython,I/O密集型用asyncio/线程,善用lru_cache缓存。

Python代码跑得慢,别急着重写,先搞清楚瓶颈在哪。性能问题90%出在不该用Python的地方,或者用了低效写法,而不是语言本身慢。
盲目优化等于浪费时间。Python自带cProfile就能快速抓出耗时大户:
python -m cProfile -s cumulative your_script.py,按累计时间排序,一眼看到哪几个函数吃掉最多CPUsnakeviz(pip install snakeviz)可视化:python -m cProfile -o profile.out your_script.py && snakeviz profile.out,生成交互式火焰图,调用链和耗时分布一目了然memory_profiler查谁在疯狂分配对象:@profile装饰函数,再运行python -m memory_profiler your_script.py
很多“Pythonic”写法在数据量大时反而成负担:
''.join(list_of_str)代替s += 'x',后者每次创建新对象,O(n²)变O(n)if x in set_x:代替if x in list_x:,查找从O(n)降到O(1)sum()、max())更快真遇到计算密集型任务,别死守纯Python:
立即学习“Python免费学习笔记(深入)”;
NumPy向量化,比for循环快几十到几百倍;矩阵运算直接上SciPy
asyncio或concurrent.futures并行,但注意GIL限制——CPU密集型选multiprocessing,I/O密集型选threading或asyncio
Cython或numba.jit编译加速,几行装饰器就能让循环飞起来@functools.lru_cache()缓存结果,尤其适合递归或参数有限的函数环境和依赖也可能拖后腿:
python -O或-OO可去掉assert和文档字符串,小幅提速)requests或SQLAlchemy可能有已知性能缺陷,升级常有惊喜不复杂但容易忽略。找准瓶颈,改对地方,Python照样能跑得又稳又快。
以上就是Python代码运行慢怎么办_性能分析入门思路【技巧】的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号