计算我的代码被调用的次数?
问题描述:
我想弄清楚如何编写我的主程序被调用了多少次。计算我的代码被调用的次数?
我想统计我的程序被调用了多少次,让我们调用程序“测试”。在程序中可以调用不同的子功能。因此,我希望能够计数这些,我们称之为“程序-1,程序-2 ...等”
另外我想看看有多少次程序已被停止,如何很多时候用户需要推动kill-switch。
任何人谁可能有任何想法如何做到这一点?
答
有关子功能的问题部分称为分析。
考虑下面的例子,计算效率非常低的某些知名函数。
import cProfile
def fibonacci(n):
if n > 1:
return fibonacci(n-1) + fibonacci(n-2)
else:
return 1
cProfile.run('print("10th Fibonacci number is {}".format(fibonacci(10)))')
如果运行这个程序,你会收到以下输出:
10th Fibonacci number is 89
180 function calls (4 primitive calls) in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
177/1 0.000 0.000 0.000 0.000 fibonacci.py:3(fibonacci)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {method 'format' of 'str' objects}
输出有趣的部分是,fibonacci
函数被调用177次计算10 Fibonacci数。
为了完整这里是一个更有效的实现
import cProfile
def internal_fibonacci(n,data):
if n < 2:
return 1
elif data[n]>0:
return data[n]
else:
m = internal_fibonacci(n-1,data) + internal_fibonacci(n-2,data)
data[n] = m
return m
def fibonacci(n):
if n > 2:
values = [0]*(n+1)
return internal_fibonacci(n,values)
else:
return 1
cProfile.run('print("10th Fibonacci number is {}".format(fibonacci(10)))')
也就是说只需要19函数调用
10th Fibonacci number is 89
23 function calls (5 primitive calls) in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 fibonacci1.py:13(fibonacci)
19/1 0.000 0.000 0.000 0.000 fibonacci1.py:3(internal_fibonacci)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {method 'format' of 'str' objects}
+1
我不认为这完全回答了 题。它并没有告诉你整个程序已经发布了多少次。 – Sunreef
退房[CPROFILE](https://docs.python.org/2/library /profile.html) –
你可以在某个地方保留一个日志文件,只要你的程序每次启动都会增加一个数字 – Sunreef