Python计算程序运行时间方法

xiaohai 2018-09-02 15:49:08 2970人围观 标签: Python  运行时间 
简介有时候我们需要计算某个代码块的运行时间有多长,所有语言都有相应的计算方式,那么在Python中又如何实现的呢?Python中到底又有哪些方式可以实现呢?本文我们将对这块的知识进行讨论。

说到某段程序时间的运行时长,其实大家的思路都一样,就是在该程序的开始获取以下当前系统的时间,在运行完后再获取一次当前系统的时间,两次时间相减就是我们所要获得的该段程序的运行时长。但是对于Python而言,要获取这个时间的方式比较多,并且方式之间存在一定的差异。下面我们先介绍相关的方法,然后再谈谈之间的不同。文章后面部分我们会使用Python提供的另一种库(timeit)来计算这个时间。

方法1、time.time()获取
import time start = time.time() def sum_func(num): sum = 0 for i in range(1, num + 1): sum += i return sum result = sum_func(100) print(result) end = time.time() print('Running time: %s Seconds' % (end - start))

运行结果(Windows)[运行多次]:

(venv) E:\python\test>python test.py 5050 Running time: 0.0004951953887939453 Seconds (venv) E:\python\test>python test.py 5050 Running time: 0.0 Seconds (venv) E:\python\test>python test.py 5050 Running time: 0.0 Seconds (venv) E:\python\test>python test.py 5050 Running time: 0.00049591064453125 Seconds

运行结果(Centos)[运行多次]:

vagrant@homestead:~$ python test.py 5050 Running time: 0.000318050384521 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 0.00025200843811 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 0.000232934951782 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 0.000305891036987 Seconds

从上面的运行结果可以看出,使用time.time()在windows上的精度不是特别高,但是在Linux系统上的精度很高。

方法2、time.clock()
import time start = time.clock() def sum_func(num): sum = 0 for i in range(1, num + 1): sum += i return sum result = sum_func(100) print(result) end = time.clock() print('Running time: %s Seconds' % (end - start))

运行结果(Windows)[运行多次]:

(venv) E:\python\test>python test.py 5050 Running time: 9.838011325349381e-05 Seconds (venv) E:\python\test>python test.py 5050 Running time: 6.699720974252268e-05 Seconds (venv) E:\python\test>python test.py 5050 Running time: 0.0001019062821873108 Seconds (venv) E:\python\test>python test.py 5050 Running time: 0.00010261151597407419 Seconds

运行结果(Centos)[运行多次]:

vagrant@homestead:~$ python test.py 5050 Running time: 5e-05 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 8.3e-05 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 3.4e-05 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 4.1e-05 Seconds

从上面的运行结果可以看出,相对来说windows返回的精度比Linux的精度相对要高些。所以Python的标准库手册推荐在任何情况下尽量使用time.clock()。

方法3、datetime模块
import datetime start = datetime.datetime.now() def sum_func(num): sum = 0 for i in range(1, num + 1): sum += i return sum result = sum_func(100) print(result) end = datetime.datetime.now() print('Running time: %s Seconds' % (end - start))

运行结果(Windows)[运行多次]:

(venv) E:\python\test>python test.py 5050 Running time: 0:00:00.000495 Seconds (venv) E:\python\test>python test.py 5050 Running time: 0:00:00 Seconds (venv) E:\python\test>python test.py 5050 Running time: 0:00:00.000496 Seconds (venv) E:\python\test>python test.py 5050 Running time: 0:00:00 Seconds

运行结果(Centos)[运行多次]:

vagrant@homestead:~$ python test.py 5050 Running time: 0:00:00.000258 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 0:00:00.000377 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 0:00:00.000286 Seconds vagrant@homestead:~$ python test.py 5050 Running time: 0:00:00.000338 Seconds

从上面的运行结果可以看出,使用datetime.datetime.now()在windows和linux的精度都不太高,所以这个方式获取的效率并不好,不提倡使用该方式。

在这里其实还需要注意下,time.clock()只计算了当前程序使用CPU的时间,而其他两种方式还包含了其他程序使用CPU的时间。那么对于time模块的time.time()和time.clock()到底哪个精度高呢?这个可以去查阅time模块的文档。总体来讲,这个分平台而定,Windows平台建议使用time.clock(),Linux系统使用time.time()。

Python的计时库timeit的使用

timeit库是一个Python的计时库,这个能确保跨平台的精度性。使用方式如下两种

#第一种 import timeit start = timeit.default_timer() def sum_func(num): sum = 0 for i in range(1, num + 1): sum += i return sum sum_func(100) end = timeit.default_timer() print('Running time: %s Seconds' % (end - start))

上面的思想也是跟前面一样,分别获取两次的时间然后相减。

#第二种 import timeit def sum_func(num): sum = 0 for i in range(1, num + 1): sum += i return sum print(timeit.timeit('sum_func(100)', 'from __main__ import sum_func', number=1))

直接使用测试函数的执行时间方式,这里只执行了一次,默认执行次数为1000000次,更多相关使用方式请自行百度。

总结:如果后期如果需要计算程序的运行时间,最好使用timeit库来进行获取,其次再根据平台来选择其他方式来获取运行时间。