我正在研究一种可视化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秒。
答案 0 :(得分:0)
您可以使用sys._getframe(1)
来了解呼叫者,如下所示:
import sys
def my_sleep():
print("Line #" + str(sys._getframe(1).f_lineno))
time.sleep(x)
请记住,做这样的事情通常不会被鼓励,但如果它只是暂时性的那么我猜。