网络编程
位置:首页>> 网络编程>> Python编程>> python 统计代码耗时的几种方法分享

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

作者:吾非同  发布时间:2023-11-03 19:51:06 

标签:python,统计,代码,耗时
目录
  • 时间戳相减

  • 装饰器

  • timeit模块

    • 重复调用 timeit()

  • cProfile性能分析工具

    时间戳相减

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

    获取时间戳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 统计代码耗时的几种方法分享

    来源:https://mp.weixin.qq.com/s?__biz=MzI5NzIyMjQwNA==&mid=2247493181&idx=2&sn=b8bf03e3c59a204e199ba0475a97be57&chksm=ecbace56dbcd47406515a931ebcf640fcb885cdfb08f2622ebf9a4339eac5910aa14e6854637&scene=21#wechat_redirect

    0
    投稿

    猜你喜欢

    手机版 网络编程 asp之家 www.aspxhome.com