我想同时运行 cProfiler(主要用于时间测量)和我在这里找到的内存分析器。但是,两者都需要给出 -m 命令行参数,这并不能很好地发挥作用。
有没有办法让两者都运行?到目前为止,我所能做的就是让翻译对我大喊大叫。
如果您需要更多信息,请告诉我,我会尽力提供。提前致谢!
我想同时运行 cProfiler(主要用于时间测量)和我在这里找到的内存分析器。但是,两者都需要给出 -m 命令行参数,这并不能很好地发挥作用。
有没有办法让两者都运行?到目前为止,我所能做的就是让翻译对我大喊大叫。
如果您需要更多信息,请告诉我,我会尽力提供。提前致谢!
-m
使用两个参数启动两个模块是不可能的。这是因为后面的命令行参数-m
都以sys.argv
. 这在文档中没有明确描述,但您可以通过实验进行尝试。
创建两个 python 文件a.py
和b.py
.
内容a.py
:
print 'a'
import sys
print sys.argv
内容b.py
:
print 'b'
现在尝试使用两个-m
参数运行两者:
$ python -m a -m b
输出:
a
['/home/lesmana/tmp/a.py', '-m', 'b']
如您所见,模块 b 永远不会启动,因为第二个模块-m
没有由 python 处理。它交给模块 a 来处理。
虽然现在对我来说很明显你不能在同一个文件上使用两个 -m 参数,但我设法将一些解决方案组合在一起。不过,它有点迂回,并不完全完美。我使用了 2 个 .bat 文件,可以在这里看到。左侧是处理 cProfiler 的 .bat,右侧是处理内存分析器的 .bat。
可以在此处和此处查看在处理内存分析器的 .bat 中看到的 python 程序的代码。
第一个程序在我这里的主要代码中的函数正上方的行中添加了# ,这意味着程序可以实际运行,cProfiler 可以做它的事情。
第二个程序删除了#,这意味着内存分析器可以工作。
为了使该系统与我的布局正常工作,首先需要将“@profile”注释掉。
它有点笨拙,可以使用一些改进来进一步自动化它(例如必须在处理内存分析器的 .bat 文件中指定文件的名称),但它现在就可以了。我也意识到这是一个非常具体的案例,但谁知道呢,也许有人和我处于完全相同的位置......