把程序交给 AI 优化前,先知道时间花在哪里。cProfile 可以记录函数调用与累计耗时,帮助你把一个模糊的“程序太慢”缩小成具体函数与输入规模。
希望AI辅助优化本地Python程序的开发者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

定位需要优化的函数前,先定规则
示例反复计算一个确定结果,用cProfile包围真实函数调用。报告中tottime是函数自身耗时,cumtime包括它调用的子函数,两者帮助区分谁消耗时间、谁汇总时间。
本地玩具例子主要检验测量入口,不提供“优化提升百分比”。不同机器、输入分布和后台负载会改变耗时。
向AI提供函数代码、输入规模、调用频次和报告,要求保留结果语义,再提出一个可独立比较的改动。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
根据cProfile报告定位值得优化的函数。先说明tottime与cumtime,不承诺加速。必须保持run()结果等于sum(i*i for i in range(2000))*5,优化前后用同样输入核对结果。不要用无依据的运行时间。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
import cProfile, pstats, io
def work(n): return sum(i*i for i in range(n))
def run(): return sum(work(2000) for _ in range(5))
prof=cProfile.Profile()
answer=prof.runcall(run)
assert answer==sum(i*i for i in range(2000))*5
stats=pstats.Stats(prof)
work_rows=[v for k,v in stats.stats.items() if k[2]=='work']
assert len(work_rows)==1 and work_rows[0][1]==5
print('answer_checked',True)
print('work_calls',work_rows[0][1])
stream=io.StringIO()
pstats.Stats(prof,stream=stream).sort_stats('cumulative').print_stats(5)
print(stream.getvalue())
怎样判断结果符合要求
answer_checked为True且work_calls为5。报告中的耗时来自本次本地执行,不能与别人的机器直接比较;应先看函数名、调用次数和耗时关系。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
answer_checked True
work_calls 5
10024 function calls (10019 primitive calls) in 0.001 seconds
Ordered by: cumulative time
List reduced from 6 to 5 due to restriction <5>
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.001 0.001 E:\zidong发布\articles\run200_20261002\programming\batch02\11-profile-bottleneck.py:3(run)
6/1 0.000 0.000 0.001 0.001 {built-in method builtins.sum}
6 0.000 0.000 0.001 0.000 E:\zidong发布\articles\run200_20261002\programming\batch02\11-profile-bottleneck.py:3(<genexpr>)
5 0.000 0.000 0.001 0.000 E:\zidong发布\articles\run200_20261002\programming\batch02\11-profile-bottleneck.py:2(work)
10005 0.001 0.000 0.001 0.000 E:\zidong发布\articles\run200_20261002\programming\batch02\11-profile-bottleneck.py:2(<genexpr>)
函数经常被调用可能比单次实现更值得改变,但缓存必须考虑输入与状态是否稳定。
本例报告前五行不是性能排名榜,生成器和内置sum也会出现在调用路径中。
哪些失败必须停下来处理
优化可能改变浮点累加顺序、异常行为或内存占用。结果相等仅覆盖当前确定整数样本。
cProfile自身有开销,不适合用它单独衡量细小差异。稳定基准需要重复运行并记录环境。
接入自己的任务前再核对一次
实际任务保留优化前输出与测试,再用一项改动比较速度和内存,不把多项改动混在一起归因。
如果耗时主要在网络或磁盘,先查等待与重试;不要让AI只重写计算循环。
资料与适用范围
cProfile记录函数调用与耗时;测量结果受环境、输入与测量开销影响。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 AI 生成的 Python 代码怎么检查?用 Ruff 找出静态问题。本文的重点是定位需要优化的函数,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33352.html