python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。...
很多人做性能测试,吧print打开,吧log调到debug级别并使用了streamhandler,那就会疯狂打印到控制台。
打印控制台会影响代码性能吗?这是毫无疑问的,python print会严重影响python性能。
有很多人对分布式函数调度框架做性能测试,但在消费函数里面进行print并且框架日志级别没有设为INFO,造成框架的性能结果严重大幅度下降,每次都要解释很久print是io行为,会严重影响代码的性能。
如果你在对任何python代码做性能测试,千万别print,你疯狂print就会造成代码性能下降,你万万没想到print也会对性能产生严重影响,只是误以为代码要优化。
下面就来看证明吧。
调用10万次add函数求和,使用严谨的控制变量法测试,测试用例如下:
1.pycahrm中调用10万次求和,但不打印结果,统计运行时间 (主要是测试不打印结果和打印少量字符串和打印很长字符串 的影响)
2.pycahrm中调用10万次求和,打印20个文字左右的长度来显示求和结果,统计运行时间 (主要是测试不打印结果和打印少量字符串和打印很长字符串 的影响)
3.pycahrm中调用10万次求和,打印500个文字左右的长度来显示求和结果,统计运行时间 (主要是测试不打印结果和打印少量字符串和打印很长字符串 的影响)
4.在cmd,把cmd窗口用鼠标缩放调成中等大小,宽10cm高10cm,运行10万次求和,打印500个文字左右的长度来显示求和结果,统计运行时间 (主要是用来测试不同窗口大小渲染print的影响)
5.在cmd,把cmd窗口用鼠标缩放调成很小,宽3cm高3cm,运行10万次求和,打印500个文字左右的长度来显示求和结果,统计运行时间 (主要是用来测试不同窗口大小渲染print的影响)
6.在cmd,把cmd窗口用鼠标缩放调成最大化,运行10万次求和,打印500个文字左右的长度来显示求和结果,统计运行时间(主要是用来测试不同窗口大小渲染print的影响,并且可以对比pycahrm运行时的耗时)
7.在cmd,把cmd窗口用鼠标缩放调成很小,宽3cm高3cm,运行10万次求和,但不打印结果,统计运行时间 (主要是用来证明不print求和结果性能很好)
测试代码如下:
import timedef add(x,y):return x +yt1 = time.time()for i in range(100000):# 只调用求和函数不打印结果,统计运行时间# add(i, i * 2)# 打印20个文字左右的长度来显示求和结果,统计运行时间# print(f'''{time.strftime("%H:%M:%S")} {i} + {i * 2} = {add(i, i * 2)}''')# 打印500个文字左右的长度来显示求和结果,统计运行时间print(f'''python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。{time.strftime("%H:%M:%S")} {i} + {i*2} = {add(i,i*2)}''')print("耗时:",time.time() -t1)
运行结果:
1.pycahrm中调用10万次求和,但不打印结果,统计运行时间 (主要是测试不打印结果和打印少量字符串和打印很长字符串 的影响),耗时0.02秒
2.pycahrm中调用10万次求和,打印20个文字左右的长度来显示求和结果,统计运行时间 (主要是测试不打印结果和打印少量字符串和打印很长字符串 的影响),耗时0.89秒
3.pycahrm中调用10万次求和,打印500个文字左右的长度来显示求和结果,统计运行时间 (主要是测试不打印结果和打印少量字符串和打印很长字符串 的影响),耗时4.11
4.在cmd,把cmd窗口用鼠标缩放调成中等大小,宽10cm高10cm,运行10万次求和,打印500个文字左右的长度来显示求和结果,统计运行时间 (主要是用来测试不同窗口大小渲染print的影响),耗时 1400秒
5.在cmd,把cmd窗口用鼠标缩放调成很小,宽3cm高3cm,运行10万次求和,打印500个文字左右的长度来显示求和结果,统计运行时间 (主要是用来测试不同窗口大小渲染print的影响),耗时7100秒
6.在cmd,把cmd窗口用鼠标缩放调成最大化,运行10万次求和,打印500个文字左右的长度来显示求和结果,统计运行时间(主要是用来测试不同窗口大小渲染print的影响,并且可以对比pycahrm运行时的耗时),耗时300秒
7.在cmd,把cmd窗口用鼠标缩放调成很小,宽3cm高3cm,运行10万次求和,但不打印结果,统计运行时间 (主要是用来证明不print求和结果性能很好),耗时0.02秒
解释一下什么叫 cmd窗口大小:
可以通过鼠标拉伸改变cmd窗口大小。
二、实验结论:
通过实验的结果得出结论:
pycahrm下打印短字符串结果比不打印结果耗时增加了40倍。
pycahrm下打印长字符串结果比打印短字符串耗时增加了5倍。
cmd窗口最大化,打印长字符串比pycahrm打印长字符串结果耗时增加了近100倍
cmd窗口调整成3cm大小时候,比cmd窗口最大化,打印长字符串耗时增加了25倍
cmd窗口调整成10cm大小时候,比cmd窗口最大化,打印长字符串耗时增加了5倍
充分的说明疯狂的进行print会非常显著严重影响代码的运行速度,print打印到控制台的速度会受到终端渲染性能的影响,
pycahrm是对代码输出优化了,会明显的批量缓存输出,性能明显好于在cmd窗口中疯狂print。
cmd窗口最大化时候,渲染输出性能最好,cmd窗口调成最小时候,print性能最差。
最好的情况是运行10万次求和不打印结果,耗时0.02秒,最差的情况是运行10万次求和并在3cm的cmd窗口中渲染输出结果耗时7100秒,简直是相差了数十万倍,你还以为在代码里面高频次的疯狂print没影响吗。
所以有的人在测我的分布式函数调度框架性能时候,我建议在消费函数中别print。并且 @task_deco装饰器
中设置 log_level=20 ,20就是常量logging.INFO的值,因为这样会大量减少屏幕控制台的输出,会使框架消费性能大幅度提高。疯狂print对性能测试造成严重不准确。
python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。...相关推荐
- python数组中查找某个值,Python实现在某个数组中查找一个值的算法示例
如何在python列表中查找某个元素的索引 方法一: 利用数组自身的特性 a.index(target), 其中a是目标list,target是需要的下标对应的值.代码如下: 可知索引为2.但是如果a ...
- python虚拟环境中安装diango_安装Python虚拟环境和django
走了一些弯路,简单记录一下 本文参考以下文章在本地环境下测试成功 ubuntu16.04 廖雪峰的博客! Virtualenv的介绍 创建虚拟环境的时候一些文章用的是virtualenv命令而另一些用 ...
- python应用中调用spark_在python中使用pyspark读写Hive数据操作
1.读Hive表数据 pyspark读取hive数据非常简单,因为它有专门的接口来读取,完全不需要像hbase那样,需要做很多配置,pyspark提供的操作hive的接口,使得程序可以直接使用SQL语 ...
- python虚拟环境中安装diango_创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...
一.创建python虚拟环境 首先,为什么要创建python的虚拟环境? 因为,在实际的项目开发中,每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要 我们根据需求不断的更新或卸载相应的库 ...
- python语句中ord_浅谈Python中chr、unichr、ord字符函数之间的对比
ord是unicode ordinal的缩写,即编号 chr是character的缩写,即字符 ord和chr是互相对应转换的. 但是由于chr局限于ascii,长度只有256,于是又多了个unich ...
- 柔性matlab机械臂运动空间代码,中正平和的机器人学笔记——2. 机械臂逆运动学(附MATAB代码)...
0. 预备知识(别跳过呀) 上一篇我们讲了正运动学,也就是通过齐次变换矩阵,知晓关节角后求得机械臂末端的位姿,并表示在基座标系下.这一篇我们就来讲一讲逆运动学问题--已知工具坐标系{T}相对于固定坐标 ...
- 做发动机性能测试的软件,用一台实验发动机测试发动机性能参数的方法
用一台实验发动机测试发动机性能参数的方法 通过设计一台专用实验发动机进行试验 ,并应用参数辩识技术 ,测量确定发动机动态 (本文共3页) 阅读全文>> 液体发射药燃速是影响液体发射药燃烧性 ...
- python如何提高性能_python – 如何在这个短代码中提高numpy性能...
我试图了解为什么我的一个python脚本比gfortran慢了约4倍,我必须这样做: import numpy as np nvar_x=40 nvar_y=10 def fn_tst(x): for ...
- 懒人python操作,代码中永远只需要导入一个库
Pyforest是一个开源的Python库,可以自动导入代码中使用到的Python库. [阅读全文] 实话说,作为一个程序员还是得不停的学习呀.昨天晚上睡觉之前就在论坛上面溜达了一会儿,发现了有个叫p ...
最新文章
- php倒序分页重复,时间倒序分页查询,翻页中有新增的数据插入db,导致返回重复数据,这个有什么好的解决办法没?谢谢大家...
- evaluate函数使用无效_[Python实战]使用栈实现简易计算器
- 精通python设计模式-Python设计模式
- Asp.Net细节性问题技巧精萃(转载)
- 查看本地文档的一些方法
- 2021夏季每日一题 【week2 未完结】
- MSP430F149的ADC12应用
- SparkContext: Error initializing SparkContext解决方法
- Linux7改运行级别,Centos7.0修改系统运行级别
- CMS 站点可能发生稳定性和性能问题
- ruby gem 安装mysql2_Ruby gem mysql2安装错误
- 计算机课奖金计算步骤,计算机二级excel真题:计算员工奖金
- python 解除excel的密码_我帮公司财务写了个“群发工资条”的Python脚本!
- 视频压缩编码基础知识(上)
- MySQL级联删除和级联修改
- 严数据结构c语言及答案,严蔚敏《数据结构(c语言版)习题集》全答案
- 全国青少年软件编程等级考试scratch一级考试大纲+考点
- pytorch保存模型pth_pytorch模型文件pth详解
- CentOS 7.5版本成功安装后修改基本配置以及可视化远程桌面解决办法
- 运行maven项目报错 :The forked VM terminated without saying properly goodbye. VM crash or System.exit calle