python 统计代码耗时的几种方法分享

本文实例讲述了Python中统计代码片段、函数运行耗时的几种方法,分享给大家,仅供参考。

时间戳相减

在代码执行前后各记录一个时间点,两个时间戳相减即程序运行耗时。

获取时间戳time.time()

 import time start_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 datetime start_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 time def 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)  # 模拟运行2s test() 输出: 耗时:2.000781536102295秒

timeit模块

timeit 模块提供了测量 Python 小段代码执行时间的方法,可以在命令行界面直接使用,也可以通过导入模块进行调用。

语句执行 number 次的时间

 #导入timeit.timeit from timeit import timeit #看x=1的执行一次的时间(number可以省略,缺省为1000000) t1 = timeit('x=1', number=1) print(t1) #一个列表生成器的执行时间,执行10000次: t2 = timeit('[i for i in range(100) if i%2==0]', number=10000) print(t2) 输出: 4.0000000001150227e-07 0.04841430000000002

计算函数的执行时间

 from timeit import timeit def func(a):     sum = 0     for i in range(a):         sum += i     return sum # timeit(函数名_字符串,运行环境_字符串,number=运行次数) t = timeit('func(10000000)', 'from __main__ import func', number=1) print(t) 输出: 0.4887406

重复调用 timeit()

repeat() 方法相当于持续多次调用 timeit() 方法并将结果返回为一个列表。repeat 参数指定重复的次数,number 参数传递给 timeit() 方法的 number 参数。

 import timeit def func(a):     sum = 0     for i in range(a):         sum += i     return sum # timeit(函数名_字符串,运行环境_字符串,number=运行次数,repeat=重复次数,repeat=5) t = timeit.repeat('func(100000)', 'from __main__ import func', number=100, repeat=5) print(t)

cProfile性能分析工具

cProfile(语言编写的测试模块)是一个标准库内建的性能分析工具,可以在标准输出中看到每一个函数被调用的次数和运行的时间,从而找到程序的性能瓶颈,从而有针对性的进行性能优化。

Python代码性能分析之cProfile

 import cProfile def func(a):     sum = 0     for i in range(a):         sum += i     return sum if __name__ == '__main__':     cProfile.run("func(10000000)")

以上就是python 统计代码耗时的几种方法分享的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » python