探查者:我可以找到调用我的功能吗?

时间:2016-09-23 18:49:11

标签: python performance profiling

我正在研究一种可视化Python配置文件跟踪的工具,为此,了解调用函数的行是很有用的。

假设我有以下简单程序:

import time

def my_sleep(x):
  time.sleep(x)

def main():
  my_sleep(1)
  my_sleep(2)

main()

如果我在其上运行cProfile(python -m cProfile -o a.data a.py),我会得到一个包含以下数据结构的封送文件:

 ('a.py', 3, 'my_sleep'): (2,
                           2,
                           1.4999999999999999e-05,
                           3.00576,
                           {('a.py', 6, 'main'): (2,
                                                  2,
                                                  1.4999999999999999e-05,
                                                  3.00576)}),

基本上,这表示my_sleep()在第6行被main()调用了两次,这相当于超过3秒。

有没有办法找出它被调用的行,而不仅仅是什么函数?因此,在这种情况下,{7}在第7行调用1秒,第8行调用2秒。

1 个答案:

答案 0 :(得分:0)

您可以使用sys._getframe(1)来了解呼叫者,如下所示:

import sys

def my_sleep():
    print("Line #" + str(sys._getframe(1).f_lineno))
    time.sleep(x)

请记住,做这样的事情通常不会被鼓励,但如果它只是暂时性的那么我猜。