优草派  >   Python

python测试运行的时间差?

高伟            来源:优草派

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

一、简单计算时间

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库,这些工具可以帮助我们更好地优化代码,在大数据量的计算中提高效率。另外,在使用这三种方法时,不宜只看其表面意义,最好能结合代码运行的实际情况和数据表现进行分析和比较,更好的寻找改进空间。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行