我是python的新手,我想使用pprofile,但我不能让它运行。例如
#pprofile --threads 0 test.py
给我错误
bash: pprofile: Command not found.
我尝试将pprofiler作为模块运行,如下所述:https://github.com/vpelletier/pprofile,使用以下脚本:
#!/usr/bin/env sc_python3
# coding=utf-8
import time
import pprofile
def someHotSpotCallable():
profiler = pprofile.Profile()
with profiler:
time.sleep(2)
time.sleep(1)
profiler.print_stats()
运行此脚本不提供输出。以下列方式更改脚本
#!/usr/bin/env sc_python3
# coding=utf-8
import time
import pprofile
def someHotSpotCallable():
profiler = pprofile.Profile()
with profiler:
time.sleep(2)
time.sleep(1)
profiler.print_stats()
print(someHotSpotCallable())
给出输出
Total duration: 3.00326s
None
如何获得https://github.com/vpelletier/pprofile上显示的逐行表格输出?
我使用Python 3.4.3,版本2.7.3在我的系统上提供相同的输出(仅总持续时间)。
我必须安装任何东西吗?
非常感谢!
答案 0 :(得分:3)
pprofile作者在这里。
要将pprofile用作命令,您必须安装它。我到目前为止唯一的工作包是via pypi。除非您使用依赖项收集工具(如buildout),否则最简单的可能是设置virtualenv并在其中安装pprofile:
flag
除此之外,没有别的东西可以安装:pprofile只依赖于python解释器功能(下面有更多内容)。 然后你可以运行它:
$path_to_your_virtualenv/bin/pip install pprofile
运行pprofile的另一种方法是获取源代码并将其作为python脚本运行,而不是作为独立的命令运行:
$path_to_your_virtualenv/bin/pprofile <args>
然后,关于令人惊讶的输出:我注意到你的shebang提到“sc_python3”作为翻译。这个python解释器的实现是什么?你会在解释器启动时加载一些非标准模块吗?
pprofile,在确定性模式下,依赖于解释器在每次换行时触发special events,每次调用函数或每次返回时,并且,为了完整性,它还监视何时创建线程因为跟踪功能是本地线程。看起来解释器不会触发这些事件。可能的解释是,其他东西正在与pprofile竞争这些事件:一次只能注册一个函数。例如,代码覆盖率工具和调试器可以使用此功能(或标准sys模块中的另一个密切相关的功能,setprofile)。仅仅为了完整性,setprofile对于pprofile是不够的,因为它只触发函数调用/返回时的事件。
您可能想要以牺牲准确性为代价来尝试pprofile的统计分析模式(但是为了极大地减少分析器开销),尽管pprofile必须依赖另一个解释器功能:列出{{3}的能力可悲的是,与sys标准标准的其他功能相比,它的可移植性更低。
所有这些在call stack of all running threads,CPython 2.x,CPython 3.x和(已经提供,但我没有亲自测试过)pypy。