我有一个使用Python编写的程序,该程序带有多个命令行参数,并在多个函数中使用它们。如何使用cProfile(在我的代码内)获取每个函数的运行时间? (我仍然希望程序完成后能够正常运行)。但是我不知道怎么做,例如我不能使用
cProfile.run('loadBMPImage(sys.argv [1])')
测试功能loadBMPImage的运行时间。我不能使用sys.argv [1]作为参数。如果每个函数都依赖命令行参数,我如何使用cProfile来测试每个函数的运行时间并打印到stdout的任何想法?而且,cProfile必须集成到代码本身中。谢谢
有几种方法。
import cProfile
import pstats
import sys
def function(n):
a = 1
for i in range(n):
a += 1
return a
[第一个是使用简单的包装器runctx()
,该包装器可以为执行的字符串指定全局变量和局部变量。在下面的示例中,我使用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
为了完整起见,使示例可运行
Profile
我使用-m cProfile运行python程序
示例:python -m cProfile
这将需要对myprogram.py进行零更改