python小知识-timeit统计程序耗时

简介: 我们在做性能分析的时候,最常用的方法就是统计程序的耗时;通过分析耗时,来确定需要优化和改进的部分

我们在做性能分析的时候,最常用的方法就是统计程序的耗时;通过分析耗时,来确定需要优化和改进的部分。

今天我们分享几个统计耗时的方法,希望对你有帮助。

1. time.time()

一种直接的方式就是利用时钟方式,统计程序前后的实时时间,然后计算耗时。

import time
def test_func_2(cnt):
    start_time = time.time()
    sum_v = 0
    for i in range(cnt):
        if i % 3 == 0:
            sum_v += i
    print("time is: {}".format(time.time() - start_time))
    return sum_v

test_func_2(10000000)
# time is: 0.5772514343261719

由上可知,time.time()这种方式,需要变更函数内的逻辑,但是比较灵活,可以检测函数内更小代码块的耗时。也可以通过装饰器的方式来统计。

2. timeit

另一种方式是通过python的内置库timeit。 timeit中timeit函数提供了单个函数或者语句的耗时统计,例子如下:

from timeit import timeit
def test_func(cnt):
    sum_v = 0
    for i in range(cnt):
        if i % 3 == 0:
            sum_v += i
    return sum_v

t2 = timeit("test_func(100000)", setup="from __main__ import test_func", number=1)
print(t2)

由上可知,timeit的好处是在函数外部测试耗时,不改变函数体内容。timeit还提供运行的次数number;timeit库中还提供repeat函数,提供反复执行的。需要注意的是timeit函数中setup是函数测试的前置命令,一般为模块导入。

3. cProfile

另一个统计耗时的工具也是python的内置库cProfile。cProfile提供了详细的性能分析信息。

import cProfile
from timeit import timeit
def test_func(cnt):
    sum_v = 0
    for i in range(cnt):
        if i % 3 == 0:
            sum_v += i
    return sum_v

cProfile.run("test_func(100000)")

yyq-2023-01-27-15-52-03.png

从上可知,ncalls表示调用次数、tottime为总耗时(不包括调用)、percall为每次调用耗时、cumtime为总耗时(包括调用)、percall为每次调用耗时、filename:lineno(function)为函数信息。

4. 总结

今天分享了3种python中统计程序耗时的方法,总结如下:

  • time.time(): 最常用灵活的方式,便于发现函数中更小模块的耗时
  • timeit:在不改变函数内容的情况下方便统计函数耗时,所以尽可能拆分功能为可测试的函数模块
  • cProfile: 一个更全面的耗时统计工具
目录
相关文章
|
1天前
|
Python
【Python进阶(二)】——程序调试方法
【Python进阶(二)】——程序调试方法
|
1天前
|
Python
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。在函数内部修改全局变量需用`global`关键字声明,否则会创建新局部变量。
9 2
|
5天前
|
消息中间件 程序员 调度
Python并发编程:利用多线程提升程序性能
本文探讨了Python中的并发编程技术,重点介绍了如何利用多线程提升程序性能。通过分析多线程的原理和实现方式,以及线程间的通信和同步方法,读者可以了解如何在Python中编写高效的并发程序,提升程序的执行效率和响应速度。
|
5天前
|
缓存 Shell 开发工具
[oeasy]python0016_在vim中直接运行python程序
在 Vim 编辑器中,可以通过`:!`命令来执行外部程序,例如`:!python3 oeasy.py`来运行Python程序。如果想在不退出Vim的情况下运行当前编辑的Python文件,可以使用`%`符号代表当前文件名,所以`:!python3 %`同样能运行程序。此外,可以使用`|`符号连续执行命令,例如`:w|!python3 %`会先保存文件(`w`)然后运行Python程序。这样,就可以在不离开Vim的情况下完成编辑、保存和运行Python程序的流程。
16 0
|
6天前
|
监控 开发者 Python
Python中记录程序报错信息的实践指南
Python中记录程序报错信息的实践指南
13 1
|
10天前
|
监控 测试技术 持续交付
Python自动化测试代理程序可用性
总之,通过编写测试用例、自动化测试和设置监控系统,您可以确保Python自动化测试代理程序的可用性,并及时发现和解决问题。这有助于提供更可靠和高性能的代理服务。
14 4
|
12天前
|
Python
简单的 Python 计算器程序
这是一个简单的Python计算器程序,实现了加、减、乘、除功能。用户选择运算类型及输入两个数字后,程序依据选择调用相应函数进行计算并显示结果。若输入非法,程序显示错误信息。
37 3
|
15天前
|
监控 测试技术 API
Python Web应用程序构建
【4月更文挑战第11天】Python Web开发涉及多种框架,如Django、Flask和FastAPI,选择合适框架是成功的关键。示例展示了使用Flask创建简单Web应用,以及如何使用ORM(如SQLAlchemy)管理数据库。
32 4
|
17天前
|
人工智能 数据库 开发者
Python中的atexit模块:优雅地处理程序退出
Python中的atexit模块:优雅地处理程序退出
12 3
|
18天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序