我用Python编写的HTTP服务器接受大型二进制文件(> 50MB)并对文件执行一些与文件相关的计算(解密,解压缩......)。我想要很好地估计执行这些操作所需的时间。我的python服务器在Ubuntu 11.10上的多CPU和多核服务器上运行。
目前我正在做(date.now()
的时间差异来获取各种操作的执行时间。我知道有几个Python模块提供了分析功能。但是,我的理解是它们仅限于只有小代码片段。
我的其他选择是什么?
感谢。
答案 0 :(得分:0)
我会说cProfile非常可靠,并且肯定是使用date.now()这样的改进。以下是cProfile用于比较无用且稍微无用的斐波纳契生成器的内容。
$ python -m cProfile script.py
4113777 function calls (1371305 primitive calls) in 1.337 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 cProfile.py:5(<module>)
1 0.000 0.000 0.000 0.000 cProfile.py:66(Profile)
1 0.009 0.009 1.337 1.337 script.py:1(<module>)
2692508/30 1.069 0.000 1.268 0.042 script.py:3(fib)
74994/25000 0.058 0.000 0.058 0.000 script.py:9(fibber)
1346269 0.200 0.000 0.200 0.000 {max}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
2 0.001 0.000 0.001 0.000 {range}
以下是我使用的代码:
import cProfile
def fib(num):
if num < 3:
return max(num, 1)
return fib(num - 1) + fib(num - 2)
fibdict = {0:1, 1:1, 2:2}
def fibber(num):
if num not in fibdict:
n = fibber(num - 1) + fibber(num - 2)
fibdict[num] = n
return fibdict[num]
a = [fib(i) for i in range(30)]
b = [fibber(i) for i in range(25000)]
cProfile非常清楚地告诉我运行的速度有多慢,并且给出了每次通话时间/呼叫次数的良好数据,以及该方法花费的总时间。显然这是微不足道的/玩具代码,但我经常使用cProfile来了解我的代码花费最多的时间,并且我发现它对于非平凡的代码非常有效。我想它可以为您提供所需的数据。