python测试运行的时间差?

Python 中用来获得代码的执行时间的操作常见有两种:直接记录起始和结束时间、使用 time 模块来获得 。在一般的大数据计算时,时间的节约是至关重要的 。除此之外,我们也需要对测试的时间差有一个较为详尽的了解 。
一、简单计算时间
【python测试运行的时间差?】

python测试运行的时间差?

文章插图
记录时间差可以用 Python 中自带的 datetime 库的 datetime.datetime.now() 方法 。通过下面的代码来计算一个函数的运行时间:
def time_cost(fn):
start = datetime.datetime.now()
fn()
print("time cost : ", datetime.datetime.now() - start)
运行上述代码,可以得到 fn 函数的运行时间:
$ time cost : 0:00:01.000417
第二种方式是time库,计算某个函数执行的时间需要如下操作:
import time
def time_cost(fn):
start = time.time()
fn()
print("time cost : ", time.time() - start)
实现方案2的操作:
def foo():
time.sleep(1)
time_cost(foo)
输出如下:
$ time cost : 1.0004310607910156
也就是说通过 time 库我们可以精确计时,精确到小数点后六位 。
二、性能分析模块——cProfile
cProfile 同时提供了命令行和 API 使用方式,命令行方式和 pycharm , anaconda 都带有这个模块 。所以无论你是使用命令行还是 pycharm , 都可以放心一起来对我们的 Python 代码来进行分析,找到其中性能的瓶颈所在,从而可以优化它 。下面是简单而又直观的一个例子 , 可以帮助开发者更好的理解问题所在 。
import cProfile
def foo():
list1 = []
for i in range(10000):
list1.append(i)
for j in range(10000):
list1.index(j)
cProfile.run("foo()")
展开之后,可以看到 类似于以下的输出:
40004 function calls in 0.012 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.002 0.002 0.012 0.012 :1()
2 0.001 0.001 0.002 0.001 {built-in method builtins.append}
10000 0.006 0.000 0.009 0.000 {built-in method builtins.index}
这样就可以比较容易的找到代码中的性能瓶颈所在 。
三、timeit模块
timeit模块是一个小工具 , 它可以用来测量方法的执行时间 。它在经过一些设置之后会返回方法的执行时间,并且可以通过参数设置不同的执行回数 。
通过导入方法,实现的方式非常的简单 。
import timeit
nums = [1, 2, 3, 4]
def use_append(num):
temp = []
for i in range(num):
temp.append(i)
print(timeit.timeit('use_append(10000)', setup='from __main__ import use_append', number=1000))
输出在我的电脑上是:0.6679865 , 即用 append 的函数用 10000 次执行的时间是 0.66 秒,执行了 1000 次 。
四、总结
测试运行的时间差的方法不同,可以根据业务情况和代码的复杂度来选择更加适合的方法 。在大数据计算时,测试代码运行效率的优化是至关重要的 。本文总结介绍了3种情况下Python常用的时间差测试方法,datetime库、cProfiler和timeit库,这些工具可以帮助我们更好地优化代码,在大数据量的计算中提高效率 。另外 , 在使用这三种方法时,不宜只看其表面意义,最好能结合代码运行的实际情况和数据表现进行分析和比较,更好的寻找改进空间 。

    推荐阅读