时间戳相减 在代码执行前后各记录一个时间点,两个时间戳相减即程序运行耗时
获取时间戳time.time()
import timestart_time = time.time() sum = 0 for i in range (100000000 ): sum += i print (sum )end_time = time.time() print ("耗时: {:.2f}秒" .format (end_time - start_time))输出: 4999999950000000 耗时: 10.53 秒
获取当前日期 datetime.datetime.now()
import datetimestart_time = datetime.datetime.now() sum = 0 for i in range (100000000 ): sum += i print (sum )end_time = datetime.datetime.now() print ("耗时: {}秒" .format (end_time - start_time))
装饰器 装饰器是一个装饰函数的函数,能够在不改变函数源码和函数调用方式的情况下给函数增加新的功能。很多时候统计函数的耗时,可以使用装饰器实现
import timedef get_time (f ): def inner (*arg,**kwarg ): s_time = time.time() res = f(*arg,**kwarg) e_time = time.time() print ('耗时:{}秒' .format (e_time - s_time)) return res return inner @get_time def test (): time.sleep(2 ) test() 输出: 耗时:2.000781536102295 秒
timeit模块 timeit 模块提供了测量 Python 小段代码执行时间的方法,可以在命令行界面直接使用,也可以通过导入模块进行调用
语句执行 number 次的时间
from timeit import timeitt1 = timeit('x=1' , number=1 ) print (t1)t2 = timeit('[i for i in range(100) if i%2==0]' , number=10000 ) print (t2)输出: 4.0000000001150227e-07 0.04841430000000002
计算函数的执行时间
from timeit import timeitdef func (a ): sum = 0 for i in range (a): sum += i return sum t = timeit('func(10000000)' , 'from __main__ import func' , number=1 ) print (t)输出: 0.4887406
重复调用 timeit()
repeat() 方法相当于持续多次调用 timeit() 方法并将结果返回为一个列表。repeat 参数指定重复的次数,number 参数传递给 timeit() 方法的 number 参数
import timeitdef func (a ): sum = 0 for i in range (a): sum += i return sum t = timeit.repeat('func(100000)' , 'from __main__ import func' , number=100 , repeat=5 ) print (t)
cProfile性能分析工具 cProfile(语言编写的测试模块)是一个标准库内建的性能分析工具,可以在标准输出中看到每一个函数被调用的次数和运行的时间,从而找到程序的性能瓶颈,从而有针对性的进行性能优化
import cProfiledef func (a ): sum = 0 for i in range (a): sum += i return sum if __name__ == '__main__' : cProfile.run("func(10000000)" )