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: 一个更全面的耗时统计工具
目录
相关文章
|
25天前
|
机器学习/深度学习 算法 数据挖掘
统计学与Python:实现描述性统计和推断性统计分析
【4月更文挑战第12天】本文介绍了Python在统计学中的应用,重点讲解了如何使用Python进行描述性与推断性统计分析。Pandas和NumPy库用于描述性统计,提供数据概括和总结功能;Scipy和Statsmodels库支持推断性统计,包括假设检验和模型建立。通过数据导入、描述性统计量计算、图表绘制以及假设检验和回归分析等步骤,展示了Python实现统计分析的基本流程。持续学习和实践将有助于提升Python统计分析能力。
|
29天前
|
Python
Python的第一个程序
【4月更文挑战第8天】Python的第一个程序
34 6
|
29天前
|
存储 人工智能 算法
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
|
21小时前
|
监控 开发者 Python
Python中记录程序报错信息的实践指南
Python中记录程序报错信息的实践指南
9 1
|
4天前
|
监控 测试技术 持续交付
Python自动化测试代理程序可用性
总之,通过编写测试用例、自动化测试和设置监控系统,您可以确保Python自动化测试代理程序的可用性,并及时发现和解决问题。这有助于提供更可靠和高性能的代理服务。
11 4
|
6天前
|
Python
简单的 Python 计算器程序
这是一个简单的Python计算器程序,实现了加、减、乘、除功能。用户选择运算类型及输入两个数字后,程序依据选择调用相应函数进行计算并显示结果。若输入非法,程序显示错误信息。
19 3
|
9天前
|
监控 测试技术 API
Python Web应用程序构建
【4月更文挑战第11天】Python Web开发涉及多种框架,如Django、Flask和FastAPI,选择合适框架是成功的关键。示例展示了使用Flask创建简单Web应用,以及如何使用ORM(如SQLAlchemy)管理数据库。
19 4
|
11天前
|
人工智能 数据库 开发者
Python中的atexit模块:优雅地处理程序退出
Python中的atexit模块:优雅地处理程序退出
10 3
|
13天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
14天前
|
Python
过年了,让GPT用Python给你写个放烟花的程序吧!
过年了,让GPT用Python给你写个放烟花的程序吧!
17 0