很多人做性能测试,吧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,否则结果严重不准确,性能大幅下降。...相关推荐

  1. python数组中查找某个值,Python实现在某个数组中查找一个值的算法示例

    如何在python列表中查找某个元素的索引 方法一: 利用数组自身的特性 a.index(target), 其中a是目标list,target是需要的下标对应的值.代码如下: 可知索引为2.但是如果a ...

  2. python虚拟环境中安装diango_安装Python虚拟环境和django

    走了一些弯路,简单记录一下 本文参考以下文章在本地环境下测试成功 ubuntu16.04 廖雪峰的博客! Virtualenv的介绍 创建虚拟环境的时候一些文章用的是virtualenv命令而另一些用 ...

  3. python应用中调用spark_在python中使用pyspark读写Hive数据操作

    1.读Hive表数据 pyspark读取hive数据非常简单,因为它有专门的接口来读取,完全不需要像hbase那样,需要做很多配置,pyspark提供的操作hive的接口,使得程序可以直接使用SQL语 ...

  4. python虚拟环境中安装diango_创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...

    一.创建python虚拟环境 首先,为什么要创建python的虚拟环境? 因为,在实际的项目开发中,每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要 我们根据需求不断的更新或卸载相应的库 ...

  5. python语句中ord_浅谈Python中chr、unichr、ord字符函数之间的对比

    ord是unicode ordinal的缩写,即编号 chr是character的缩写,即字符 ord和chr是互相对应转换的. 但是由于chr局限于ascii,长度只有256,于是又多了个unich ...

  6. 柔性matlab机械臂运动空间代码,中正平和的机器人学笔记——2. 机械臂逆运动学(附MATAB代码)...

    0. 预备知识(别跳过呀) 上一篇我们讲了正运动学,也就是通过齐次变换矩阵,知晓关节角后求得机械臂末端的位姿,并表示在基座标系下.这一篇我们就来讲一讲逆运动学问题--已知工具坐标系{T}相对于固定坐标 ...

  7. 做发动机性能测试的软件,用一台实验发动机测试发动机性能参数的方法

    用一台实验发动机测试发动机性能参数的方法 通过设计一台专用实验发动机进行试验 ,并应用参数辩识技术 ,测量确定发动机动态 (本文共3页) 阅读全文>> 液体发射药燃速是影响液体发射药燃烧性 ...

  8. python如何提高性能_python – 如何在这个短代码中提高numpy性能...

    我试图了解为什么我的一个python脚本比gfortran慢了约4倍,我必须这样做: import numpy as np nvar_x=40 nvar_y=10 def fn_tst(x): for ...

  9. 懒人python操作,代码中永远只需要导入一个库

    Pyforest是一个开源的Python库,可以自动导入代码中使用到的Python库. [阅读全文] 实话说,作为一个程序员还是得不停的学习呀.昨天晚上睡觉之前就在论坛上面溜达了一会儿,发现了有个叫p ...

最新文章

  1. php倒序分页重复,时间倒序分页查询,翻页中有新增的数据插入db,导致返回重复数据,这个有什么好的解决办法没?谢谢大家...
  2. evaluate函数使用无效_[Python实战]使用栈实现简易计算器
  3. 精通python设计模式-Python设计模式
  4. Asp.Net细节性问题技巧精萃(转载)
  5. 查看本地文档的一些方法
  6. 2021夏季每日一题 【week2 未完结】
  7. MSP430F149的ADC12应用
  8. SparkContext: Error initializing SparkContext解决方法
  9. Linux7改运行级别,Centos7.0修改系统运行级别
  10. CMS 站点可能发生稳定性和性能问题
  11. ruby gem 安装mysql2_Ruby gem mysql2安装错误
  12. 计算机课奖金计算步骤,计算机二级excel真题:计算员工奖金
  13. python 解除excel的密码_我帮公司财务写了个“群发工资条”的Python脚本!
  14. 视频压缩编码基础知识(上)
  15. MySQL级联删除和级联修改
  16. 严数据结构c语言及答案,严蔚敏《数据结构(c语言版)习题集》全答案
  17. 全国青少年软件编程等级考试scratch一级考试大纲+考点
  18. pytorch保存模型pth_pytorch模型文件pth详解
  19. CentOS 7.5版本成功安装后修改基本配置以及可视化远程桌面解决办法
  20. 运行maven项目报错 :The forked VM terminated without saying properly goodbye. VM crash or System.exit calle

热门文章

  1. 解决springcloud 中各服务之间调用外部依赖的clint api时,在调试时不方便的问题
  2. 希捷和西数移动硬盘哪个好_希捷和西数硬盘哪个好?
  3. TreeView:牵一发而动全身
  4. 国内外云主机平台对比
  5. 锁定应用,解锁应用,锁卡,解卡,更改密码指令
  6. 世界这么大 还是遇见你
  7. 德国螺栓VDI2230导则:紧固件知识领域的独门利器
  8. 2022个人邮箱注册,在公司内个人邮箱怎么注册?
  9. ZZULIOJ1001: 植树问题
  10. 百度飞桨:十行代码高效完成深度学习POC