前言:

多年前我第一次接触Python,在此之后便成为 Python 的疯狂爱好者。
在工作中能用程序自动化实现的,我都尽可能积极的使用 Python,工作效率有了质的飞跃;
由此,我慢慢地了解到了 GIL,也通过尝试知道了在计算密集行任务方面,Python 的性能表现也许的确不如 Java,Golang 等静态语言,正因如此,有很多人开始不再尝试使用 Python,但在这里我想说,从我这些年的从业经历来看,Python 并没有让我觉得"慢",即使让我去与其他语言相比;也许它不如其他语言快,但对我来说并没有什么影响,在这里我归纳了几个我认为Python不影响实用操作的原因,不知是否会与你们引起共鸣:

1. 速度真的有那么重要吗?并不见得。

过去,程序要花很长时间才能运行。CPU、内存都很昂贵,程序的运行时间是一个非常重要的指标,电脑非常贵,运行它们的电费也很贵,而商业永恒不变的法制就是—优化你最贵的那部分资源。从历史来看,最昂贵的就是计算机的运行时间,这也是商业和科学研究的重点,算法,编译优化,都是为了让程序更快的完成。

现在计算机不那么贵了,每个人都有了自己的电脑,不少人都有了自己的个人网站(服务器),硬件的性能也像摩尔定律那样提升了很多,计算机的运行时间不在昂贵,而昂贵的是你的时间,本质上讲,老板雇佣你,就是购买的你的可支配时间。毫无疑问,同样的功能,Python 是最节省你的时间的。

你也许会说,我的公司在乎速度,我创建了一个 web 应用程序,需要在毫秒内响应,或者说客户会取消下单因为我们的应用太慢了。我并不否认速度不再重要,我想说的是 速度并不是你最昂贵的资源,最昂贵的是你的时间,或者你公司抢占市场的先机,也就是说你的编程速度是最昂贵的资源。

2. 微服务的兴起,意味着时代的更迭。

像亚马逊、谷歌、奈飞等公司都知道快速行动的重要性,他们创建的业务系统可以快速部署和创新,微服务是其解决问题的方法,本文不讨论是否该使用微服务,但至少亚马逊、谷歌、奈飞觉得应该使用微服务。而微服务本来就慢,本来一个调用一个函数搞定,现在搞调用一个网络接口。一个函数也就若干个 CPU 周期,而一个网络接口却是 TCP 的三次握手和四次挥手,如果假设一个 CPU 周期是 1 秒的话,那么从加尼福利亚到纽约的网络访问时常则是 4 年。微服务最大的缺点就是慢,最大的优点就是可以快速出产品,快速上市。微服务的流行正说明,现在这个时代吗,产品迭代开发速度远比程序的运行速度更重要。

3. CPU 已不再是瓶颈。

如果你编写 WEB 应用,那么 CPU 的时间已经不是瓶颈。还是刚才的例子,如果假设一个 CPU 周期是 1 秒的话,那么从加尼福利亚到纽约的网络访问时常则是 4 年,比如说同一数据中心内部的网络通信大约 3 毫秒,这相当于人类的 3 个月,假设你用其他较快的编程语言 X 响应一次请求需要 100000 个 CPU 周期,这相当于人类的 1 天,也就是说总的响应时间是 3 个月+ 1 天。现在,就算 Python 比 X 慢 5 倍,也就是说总的响应时间是 3 个月+ 5 天,你觉得区别大吗?假如需要 3 个月后才能收到快递,那么再多等个四天,基本上没有多大关系。

这就意味着,即使 Python 有点慢也没关系,也就是说语言的速度( CPU 时间)几乎不是问题,Google 对此进行了研究并发表了论文[https://static.googleusercontent.com/media/research.google.com/en//archive/sawzall-sciprog.pdf],大致意思如下:在高吞吐量环境下使用解释型语言看起来很矛盾,但我们发现 CPU 时间极少是限制因素,编程语言的可表达性意味着大多数程序都很小,大部分时间都是花在 I/O 操作和本地运行时代码上,此外解释型语言在允许我们将计算结果分布到许多机器上很有帮助。

4. CPU 时间就是瓶颈吗?

你可能会说,我们遇到的问题就是 CPU 是瓶颈,导致 WEB 应用访问很慢,或者说语言 X 就是比语言 Y 快,没错,有时确实如此。不过,WEB 服务器的妙处在于你几乎可以无限制的进行负载均衡,最简单粗暴的方法,就是升级 CPU 或硬件,与你的时间相比,这些硬件非常便宜,如果一年节省你几个星期的时间,这足以支付增加的硬件成本。

此外 Python 还可以调用 C 语言或 Java 的函数,如果你觉得某一块慢,可以使用其他语言改写,再用 Python 调用,此外还可以了解下 Cython,可以把 Python 代码编译为 C 代码来提升速度。

5. Python 更快吗?

前面一直在说,最重要的是开发时间的长短,那么 Python 更快吗?我可以明确的告诉你,Python 的生产率更高,它可以帮助你更专注于真正要编写的代码,而不会陷入细小的杂草中(你不用考虑用 vector 好还是 array 好),下面是一组数据来自一项研究论文:

不同语言编写一个字符串处理程序所花费的时间

可以看出 Python 的生产力是 Java 的 2 倍以上。可以说 Python 比其他许多语言的生产力更高,主要是由于 Python 的内省和大量的第三方库。

6. 如果运行时间确实有影响呢?

有些情况下,运行时的性能确实很重要,那就需要优化,但不要过早优化,在不了解瓶颈的情况下进行优化,成为过早优化。过早优化会浪费你宝贵的时间,你应该找到瓶颈(最昂贵的资源),然后进行针对的优化。

7. 小结一下

最后,小结一下吧

1、针对最昂贵的资源进行优化,而不是计算机。

2、选择可以帮助快速开发的语言或框架

3、当你遇到性能问题时要找到瓶颈,很可能不是 CPU 或 Python 本身。

4、如果 Python 是瓶颈(已经优化了算法),请将关键代码转至 Cython 或 C 语言。

享受 Python 快速完成工作的过程吧!

Python真的很慢?那又如何!在实践中告诉你真相!相关推荐

  1. python真的很厉害吗-python为什么这么牛?Python真有这么好的前景?

    要说最近几年最火的语言,python绝对可以拥有姓名,最近几年Python更是有超越Java之势.python的应用范围非常非常的广泛,但Python的整体语言难度来讲又比Java简单的很多.尤其是在 ...

  2. python应用领域介绍 -- (python 真的很强大)

    #---------------------转转转转转转转转转转转转转转转转转转转转转转转-------------------------------------------# Python作为一种 ...

  3. Python 真的很难 (Ⅰ)

    温馨提示:如果你不是初学者请跳过本文:这里会有Python的进阶内容(提前挖坑) Python 难吗? 废话 Welcome to Python! 真·入门 算术题 四则混合运算 高年级的算术题 程序 ...

  4. python真的很厉害吗-学会Python后都能做什么?网友们的回答简直不要太厉害

    如今,越来越多的人加入到学习Python的队伍当中. 有的学习者是设计师,学习Python可以帮助他们查找更多的海报案例;有的学习者是大学生,学习Python可以帮助他们更好地查阅论文资料;还有的学习 ...

  5. 十年程序员将Python分成7个阶段学习,你会发现Python真的很简单

    根据TIOBE最新排名,Python与Java,C,C++,C#成为全球前5大流行编程语言.从云端.客户端,到物联网终端,python应用无处不在. 从国内的百度.阿里.腾讯.网易.新浪,豆瓣,到国外 ...

  6. i5功耗最低的cpu_CPU真的很费电? 三种环境下处理器功耗实测

    2013-4-7 06:17 [天极网DIY硬件频道]在我们进行装机搭配时,往往在选购电源方面有很大的误区,即使不使用独立显卡也要选择大功率电源.很多DIY玩家总认为CPU是耗电大户,经常以CPU和显 ...

  7. python学了真的很有用吗-学习Python真的有必要参加培训吗?老男孩Python学习机构...

    零基础学习Python真的能学会吗?我想很多人都具有这样的疑问吧.其实Python是非常适合初学者入门学习的编程语言,相比较其他主流的编程语言来说,可读性高,上手容易.而且Python具有非常丰富的库 ...

  8. python学了真的很有用吗-你还在盲目跟风学Python?你真的了解吗?某华大学教授有话要说...

    你觉得Python真的好吗?或许你在漫天的宣传中看到了这些: 接近英语的简单语法: 开发环境简单,能打字就能写代码: 众多的第三方库: 解释执行,不需要编译: 跨平台,方便移植: 但是作为一个负责任的 ...

  9. python学了真的很有用吗-python学了真的很有用吗?当然!赶紧学,不学后悔!

    Python的一个特点是它可以用简单的语法处理大量复杂的问题.这使得初学者能够专注于学习编程概念,而不必过多担心细节,并且可以节省大量时间.例如,以编程中最常见的程序"你好,世界" ...

最新文章

  1. MRTG—网络监控工具
  2. docker 训练深度学习_利用RGB图像训练MultiModality的深度学习模型进行图像分割
  3. [BC]Four Inages Strategy(三维空间判断正方形)
  4. elasticsearch mapping之dynamic
  5. react——一个todolist的demo
  6. 数论--中国剩余定理模板
  7. .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现
  8. python 图片生成视频_python--通过cv2多张图片生成视频
  9. HDU 1034 - Candy Sharing Game
  10. 《跟我一起做J2EE版Blog–jPress》6(Spring集成Struts2,打通第一个Action)
  11. Error: spawn xxxx ENOENT原因与解决
  12. adc matlab代码,pudn-几种ADC设计的matlab源码
  13. 信息系统项目管理师真题2017下半年附答案解析(1)
  14. mysql的ace什么概念_ACE(03):努力了,总会有收获
  15. 西方各国高职高专教育模式
  16. 适合python的vim设置
  17. 队友代码拜读(文末附福利呦)
  18. 深大自考计算机科学与技术资料,想自考深圳大学的计算机科学与技术专业,难吗?...
  19. Java实现生命游戏Plus
  20. 雷军:没想到红米会如此火 芯片也应免费

热门文章

  1. unity骚操作: 让UGUI RectTransform.SizeDelta根据鼠标点击的距离长度而延长
  2. Linux常用命令——ls命令
  3. google云端硬盘colab
  4. CVPR2021论文速览--LaPred: Lane-Aware Prediction of Multi-Modal Future Trajectories of Dynamic Agents
  5. Spring中的Aware作用以及源码
  6. Android 刘海屏全面屏适配
  7. python定义向量内积函数_python – 沿多维数组的一维向量点积
  8. 使用forkjoin框架分页查询所有数据的例子
  9. 我的世界lua脚本改保湿度源码
  10. 如何实现C++和C的混合编程?