我如何使用cProfile模块在python中为每个功能计时?

问题描述 投票:0回答:2

我有一个使用Python编写的程序,该程序带有多个命令行参数,并在多个函数中使用它们。如何使用cProfile(在我的代码内)获取每个函数的运行时间? (我仍然希望程序完成后能够正常运行)。但是我不知道怎么做,例如我不能使用

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

测试功能loadBMPImage的运行时间。我不能使用sys.argv [1]作为参数。如果每个函数都依赖命令行参数,我如何使用cProfile来测试每个函数的运行时间并打印到stdout的任何想法?而且,cProfile必须集成到代码本身中。谢谢

python profiler cprofile
2个回答
0
投票

有几种方法。

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

0
投票

我使用-m cProfile运行python程序

示例:python -m cProfile

这将需要对myprogram.py进行零更改

© www.soinside.com 2019 - 2024. All rights reserved.