从命令行对Python模块进行性能分析

6

我有一个Python项目,我使用-m标志将应用程序作为模块执行。所以大概是这样:

python -m apps.validate -i input.mp4

现在,我想要使用命令行对其进行分析。因此,内联示例建议将cProfile本身作为模块调用。但是,我不能像下面这样做:

python -m cProfile apps.validate -i input.mp4

然而,这会导致错误信息“没有这样的文件或目录”。我不能仅仅进入"apps"目录并启动"validate.py",因为存在相对导入。
有没有一种方法可以在命令行上对一个模块进行分析?

5
cProfile在线文档中,有一个“版本 3.7 中的新内容”提示,其中提到该版本中添加了 -m 选项。这是 Python 解释器自带的 -m 选项之外的另一个选项。这意味着如果你使用的是 Python 3.7+,那么类似于 python -m cProfile -m apps.validate -i input.mp4 的命令应该可以工作。 - martineau
1
我明白了。不幸的是,我的东西需要Python 3.6,因为一些其他库与3.7不兼容。我想我需要在代码中使用它。 - Luca
2
你可以查看 profile(和 cProfile)的源代码,了解如何添加对新 -m 选项的支持。甚至可能可以将其版本与早期版本的Python解释器一起使用(取决于进行了哪些其他更改)。 - martineau
1个回答

8

不要在 shell 中运行 cProfile,可以通过在 apps.validate 中添加一些代码或创建一个新脚本并像这样导入 apps.validate,来使用 python 脚本中的 cProfile。下面可能有一些拼写错误 :)

import cProfile
import sys

def run_validate(args): 
    # run your apps.validate code with shell arguments args here
    pass

if __name__ == '__main__':
    pr = cProfile.Profile()
    pr.enable()
    run_validate(*sys.argv)
    pr.disable()
    pr.print_stats()

那么只需运行原始脚本:python -m apps.validate -i input.mp4


2
pr.dump_stats(filename)会将其保存到文件中。 - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接