python程序运行时间的几种分析方法
2017-08-15 18:10
441 查看
在实际问题中,可能会遇到比较解决同一问题的不同方法之间的性能差异。而Python 提供了一个度量工具,为这些问题提供了直接答案。
从查阅资料的情况来看,测试运行时间的调用的模块主要有:time,timeit,datetime,profile 和pstats。其中,profile 和pstats模块提供了针对更大代码块的时间度量工具。以下主要以time,timeit,datetime为例进行说明。
在time模块中,计算时间的函数有两个time()和clock()。其中,time(time.time(),time返回的是UTC时间(seconds
since the 00:00:00 UTC on January 1)。在很多系统,包括windows下精度很差,win32下的精度只有1/18.2秒。不过在Unix/Linux系统下,time()的精度还是很高的。)time()是计算现实世界的时间,而clock()是cpu
时钟。如果程序计算量不是很大,time()可能无法计算时间,从而导致程序测试失败。而clock()是利用cpu
时钟,时间计算精度较高。对比测试程序如下:
2
timeit 模块定义了接受两个参数的 Timer 类。两个参数都是字符串。 第一个参数是你要计时的语句或者函数。 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句。 从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。
一旦有了 Timer 对象,最简单的事就是调用 timeit(),它接受一个参数为每个测试中调用被计时语句的次数,默认为一百万次;返回所耗费的秒数。
Timer 对象的另一个主要方法是 repeat(), 它接受两个可选参数。 第一个参数是重复整个测试的次数,第二个参数是每个测试中调用被计时语句的次数。 两个参数都是可选的,它们的默认值分别是 3 和 1000000。 repeat() 方法返回以秒记录的每个测试循环的耗时列表。Python 有一个方便的 min 函数可以把输入的列表返回成最小值,如: min(t.repeat(3, 1000000))
你可以在命令行使用 timeit 模块来测试一个已存在的 Python 程序,而不需要修改代码。
输出结果为:
def time_1():
begin = datetime.datetime.now()
sum(range(10000000))
end = datetime.datetime.now()
time = end - begin
return time
print(time_1())输出结果为:
从查阅资料的情况来看,测试运行时间的调用的模块主要有:time,timeit,datetime,profile 和pstats。其中,profile 和pstats模块提供了针对更大代码块的时间度量工具。以下主要以time,timeit,datetime为例进行说明。
1 time模块测试程序运行时间
在time模块中,计算时间的函数有两个time()和clock()。其中,time(time.time(),time返回的是UTC时间(seconds
since the 00:00:00 UTC on January 1)。在很多系统,包括windows下精度很差,win32下的精度只有1/18.2秒。不过在Unix/Linux系统下,time()的精度还是很高的。)time()是计算现实世界的时间,而clock()是cpu
时钟。如果程序计算量不是很大,time()可能无法计算时间,从而导致程序测试失败。而clock()是利用cpu
时钟,时间计算精度较高。对比测试程序如下:
import time #利用time.clock()计时测试 start_time1 = time.clock() i = 0 string = 'ILoveFishC.com' while i < len(string): print(i, end=' ') i += 1 end_time1 = time.clock() time1 = end_time1-start_time1 print('\nRunning time1:', time1) #利用time.time()计时测试 start_time2 = time.time() i = 0 string = 'ILoveFishC.com' while i < len(string): print(i, end=' ') i += 1 end_time2 = time.time() time2 = end_time2-start_time2 print('\nRunning time2:', time2)输出结果为:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 Running time1: 3.2431984176475974e-05 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Running time2: 0.0从中可以看出,time.time()用于测试运行时间是有限的,对于某些较短或运算量不大的程序是无法测量的。
2
timeit模块测试程序运行时间
timeit 模块定义了接受两个参数的 Timer 类。两个参数都是字符串。 第一个参数是你要计时的语句或者函数。 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句。 从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。一旦有了 Timer 对象,最简单的事就是调用 timeit(),它接受一个参数为每个测试中调用被计时语句的次数,默认为一百万次;返回所耗费的秒数。
Timer 对象的另一个主要方法是 repeat(), 它接受两个可选参数。 第一个参数是重复整个测试的次数,第二个参数是每个测试中调用被计时语句的次数。 两个参数都是可选的,它们的默认值分别是 3 和 1000000。 repeat() 方法返回以秒记录的每个测试循环的耗时列表。Python 有一个方便的 min 函数可以把输入的列表返回成最小值,如: min(t.repeat(3, 1000000))
你可以在命令行使用 timeit 模块来测试一个已存在的 Python 程序,而不需要修改代码。
from timeit import Timer print(Timer("sum(range(100))").timeit())
输出结果为:
1.547405913377044
3 datetime模块测试程序运行时间
datetime同样是基于现实时钟的,同样是针对于运算量较大的程序,使用方法如下:import datetimedef time_1():
begin = datetime.datetime.now()
sum(range(10000000))
end = datetime.datetime.now()
time = end - begin
return time
print(time_1())输出结果为:
0:00:00.470582
相关文章推荐
- 分析python程序运行时间的几种方法
- python记录程序运行时间的几种方法
- 补充:测量程序运行时间的几种方法
- 三种计算Python的代码块或程序的运行时间的方法比较
- 10种检测Python程序运行时间、CPU和内存占用的方法
- Matlab中计算程序显示运行时间的几种方法
- 检测Python程序运行时间和内存占用的方法
- python运行时间的几种方法
- Python基于time模块求程序运行时间的方法
- Python几种建表方法运行时间的比较
- C++中几种测试程序运行时间的方法
- Python计算程序运行时间的方法
- C++中几种测试程序运行时间的方法
- c/c++计算程序运行时间的几种方法
- 转载:10种检测Python程序运行时间、CPU和内存占用的方法
- python记录程序运行时间的三种方法
- python记录程序运行时间的三种方法
- Matlab中计算程序运行时间的几种方法
- python运行时间的几种方法
- 测量程序运行时间的几种方法