python中程序运行时间的计算

Python048

python中程序运行时间的计算,第1张

单细胞中各种同类工具层出不重,往往需要比较软件间的重现性,运行速度等,因此查阅了python中程序运行时间计算的各种方法。

程序中主要有两种时间CPU time和Wall time, 前者就是CPU实际运行的时间,包含系统CPU time和程序CPU time;

1. 使用装饰器来衡量函数执行时间有一个简单方法,那就是定义一个装饰器来测量函数的执行时间,并输出结果: import time from functoolsimport wraps import random def fn_timer(function):   @wraps(function)   def function_timer(*args, **kwargs):       t0= time.time()       result= function(*args, **kwargs)       t1= time.time()       print("Total time running %s: %s seconds" %           (function.__name__, str(t1- t0)) )       return result return function_timer @fn_timer def random_sort(n):   return sorted([random.random() for i in range(n)]) if __name__== "__main__":   random_sort(2000000) 输出:Total time running random_sort: 0.6598007678985596 seconds 使用方式的话,就是在要监控的函数定义上面加上 @fn_timer 就行了 或者 # 可监控程序运行时间 import time import random def clock(func):     def wrapper(*args, **kwargs):         start_time= time.time()         result= func(*args, **kwargs)         end_time= time.time()         print("共耗时: %s秒" % round(end_time- start_time, 5))         return result return wrapper @clock def random_sort(n):   return sorted([random.random() for i in range(n)]) if __name__== "__main__":   random_sort(2000000) 输出结果:共耗时: 0.65634秒2. 使用timeit模块另一种方法是使用timeit模块,用来计算平均时间消耗。 执行下面的脚本可以运行该模块。这里的timing_functions是Python脚本文件名称。 在输出的末尾,可以看到以下结果:4 loops, best of 5: 2.08 sec per loop 这表示测试了4次,平均每次测试重复5次,最好的测试结果是2.08秒。 如果不指定测试或重复次数,默认值为10次测试,每次重复5次。3. 使用Unix系统中的time命令然而,装饰器和timeit都是基于Python的。在外部环境测试Python时,unix time实用工具就非常有用。 运行time实用工具: 输出结果为: Total time running random_sort: 1.3931210041 seconds real 1.49 user 1.40 sys 0.08 第一行来自预定义的装饰器,其他三行为:     real表示的是执行脚本的总时间     user表示的是执行脚本消耗的CPU时间。     sys表示的是执行内核函数消耗的时间。 注意:根据维基百科的定义,内核是一个计算机程序,用来管理软件的输入输出,并将其翻译成CPU和其他计算机中的电子设备能够执行的数据处理指令。 因此,Real执行时间和User+Sys执行时间的差就是消耗在输入/输出和系统执行其他任务时消耗的时间。4. 使用cProfile模块 5. 使用line_profiler模块6. 使用memory_profiler模块7. 使用guppy包