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


Posted in Python onApril 02, 2021

时间戳相减

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

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

以上就是python 统计代码耗时的几种方法分享的详细内容,更多关于python 统计代码耗时的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用Python的Supervisor进行进程监控以及自动启动
May 29 Python
python基础教程之缩进介绍
Aug 29 Python
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
python对html代码进行escape编码的方法
May 04 Python
python使用正则表达式匹配字符串开头并打印示例
Jan 11 Python
利用Python实现网络测试的脚本分享
May 26 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
docker-py 用Python调用Docker接口的方法
Aug 30 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
Python 如何测试文件是否存在
Jul 31 Python
python 遍历磁盘目录的三种方法
Apr 02 #Python
python 如何在 Matplotlib 中绘制垂直线
在Windows下安装配置CPU版的PyTorch的方法
PyQt5 QThread倒计时功能的实现代码
Apr 02 #Python
Python中Permission denied的解决方案
Apr 02 #Python
python爬不同图片分别保存在不同文件夹中的实现
Python读取文件夹下的所有文件实例代码
You might like
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
我的论坛源代码(七)
2006/10/09 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
python使用pil生成缩略图的方法
2015/03/26 Python
python中迭代器(iterator)用法实例分析
2015/04/29 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
python 弧度与角度互转实例
2020/04/15 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
巴西手表购物网站:eclock
2019/03/19 全球购物
校庆活动策划方案
2014/06/05 职场文书
爱护公共设施标语
2014/06/24 职场文书
小石潭记导游词
2015/02/03 职场文书
无保留意见审计报告
2015/06/05 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫