如何提升Python cProfile输出的时间分辨率以查看短耗时代码?
解决cProfile输出小数位数不足的问题
cProfile默认输出仅保留3位小数,要查看更精细的耗时数据,可通过pstats模块自定义输出格式,以下是两种可行方案:
方案1:保存统计文件后再处理
先将性能分析结果保存到文件,再用pstats加载并指定小数位数:
import cProfile import pstats import numpy as np from scipy import signal def prof_func(): x = 100 y = 100 a = np.random.rand(x,y) c = signal.convolve2d(a, a, boundary='symm', mode='same') # 运行分析并保存结果 cProfile.run('prof_func()', 'profile_data') # 加载统计数据并设置6位小数输出 stats = pstats.Stats('profile_data') stats.sort_stats('time') # 按耗时排序 stats.print_stats(6) # 参数指定小数位数,默认3位
方案2:实时分析并自定义输出
无需保存文件,直接在代码中完成分析和自定义输出:
import cProfile import pstats import numpy as np from scipy import signal def prof_func(): x = 100 y = 100 a = np.random.rand(x,y) c = signal.convolve2d(a, a, boundary='symm', mode='same') pr = cProfile.Profile() pr.enable() prof_func() pr.disable() # 生成统计对象并设置小数位数 stats = pstats.Stats(pr) stats.sort_stats('cumulative') stats.print_stats(6)
说明
pstats.Stats.print_stats()方法的第一个参数可指定输出的小数位数,你可以根据需求调整(比如6位、9位),这样就能显示np.random.rand这类短耗时操作的真实数据。
内容的提问来源于stack exchange,提问作者user8899928
相关产品推荐
相关产品推荐

