无法在程序中调用cProfile
抱歉问了个初学者的问题,但我对cProfile搞不太懂(我刚开始学Python)
我可以通过终端运行它,命令是:
python -m cProfile myscript.py
但我需要在一个网页服务器上运行,所以我想把这个命令放到我正在查看的脚本里。我该怎么做呢?我看到有些地方提到__init__和__main__
这些术语,但我其实不太明白它们是什么意思。
我知道这很简单,我只是还在努力学习所有的知识,我相信一定有人能帮我解答。
提前谢谢你们!我很感激。
1 个回答
5
我想你可能见过这样的想法:
if __name__ == "__main__":
# do something if this script is invoked
# as python scriptname. Otherwise, gets ignored.
当你用python运行一个脚本时,如果这个文件是直接被python执行的,它的属性 __name__
会被设置为 "__main__"
。如果不是直接调用它,那它就是被导入的。
现在,如果你需要的话,可以在你的脚本中使用这个技巧,比如说,假设你有:
def somescriptfunc():
# does something
pass
if __name__ == "__main__":
# do something if this script is invoked
# as python scriptname. Otherwise, gets ignored.
import cProfile
cProfile.run('somescriptfunc()')
这会改变你的脚本。当被导入时,它的成员函数、类等等可以正常使用。当从命令行 运行 时,它会进行自我分析。
这就是你想要的吗?
根据我从评论中了解到的,可能还需要更多信息,所以接下来是:
如果你是通过CGI运行一个脚本,通常它的形式是:
# do some stuff to extract the parameters
# do something with the parameters
# return the response.
当我说抽象出来时,你可以这样做:
def do_something_with_parameters(param1, param2):
pass
if __name__ = "__main__":
import cProfile
cProfile.run('do_something_with_parameters(param1=\'sometestvalue\')')
把那个文件放到你的python路径上。当它自己运行时,它会分析你想要分析的函数。
现在,对于你的CGI脚本,创建一个做以下事情的脚本:
import {insert name of script from above here}
# do something to determine parameter values
# do something with them *via the function*:
do_something_with_parameters(param1=..., param2=...)
# return something
所以你的cgi脚本只是你的函数的一个小包装(反正它就是这样),而你的函数现在可以自我测试了。
然后你可以在桌面上使用虚构的值来分析这个函数,远离生产服务器。
可能还有更简洁的方法来实现这个,但这样做也是可行的。