gpt4 book ai didi

python - 如何使用 cProfile 模块对 python 中的每个函数进行计时?

转载 作者:行者123 更新时间:2023-12-05 01:02:31 27 4
gpt4 key购买 nike

我有一个 Python 程序,它接受多个命令行参数并在多个函数中使用它们。如何使用 cProfile(在我的代码中)获取每个函数的运行时间? (我仍然希望程序在完成后正常运行)。但是我无法弄清楚如何,例如我无法使用

cProfile.run('loadBMPImage(sys.argv[1])')

测试函数loadBMPImage的运行时间。我不能使用 sys.argv[1] 作为参数。如果每个函数都依赖于命令行参数,我知道如何使用 cProfile 测试每个函数的运行时间并打印到标准输出吗?此外,cProfile 必须集成到代码本身中。谢谢

最佳答案

有几种方法。

import cProfile
import pstats

import sys


def function(n):
a = 1
for i in range(n):
a += 1
return a

第一个是使用简单的包装器 runctx()这允许您为执行的字符串指定全局变量和局部变量。在下面的示例中,我使用 globals() 传递 function 对象,并使用 locals 传递参数,但可以不同地排列,当然。

def profile1():
cProfile.runctx("function(n)", globals(), dict(n=int(sys.argv[1])), filename='test')
return pstats.Stats('test')

您不需要弄乱 exec 的更好方法是使用 Profile类(class)。这样你就可以分析一段常规代码:

def profile2():
pr = cProfile.Profile()
pr.enable()
function(int(sys.argv[1]))
pr.disable()
return pstats.Stats(pr)

为了完整起见,使示例可运行

if __name__ == '__main__':
profile1().print_stats()
profile2().print_stats()

关于python - 如何使用 cProfile 模块对 python 中的每个函数进行计时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34032055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com