前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >是的,Python是慢,但我不在乎

是的,Python是慢,但我不在乎

作者头像
somenzz
发布2020-11-25 14:48:05
4350
发布2020-11-25 14:48:05
举报
文章被收录于专栏:Python七号Python七号

‍‍

几年前我做运维时用到 Python,从此便成为 Python 的狂热分子,工作上能用程序自动化实现的,我都尽可能积极的使用 Python,极大的提高了工作效率,不知道的以为我的工作是个闲职,导致我“丢”掉了运维岗位,也罢,重复的事情做多了也就乏味了。

慢慢的我知道了 GIL,也通过尝试知道了在计算密集行任务方面,Python 的性能表现的确不如 Java,Golang 等静态语言,有人也因此拒绝尝试使用 Python,但是从我自身的经历来看,Python 并未让我觉得慢,即使与其他语言相比,有点慢,但我并不在乎,原因如下:

一、速度不再那么重要。

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

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

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

二、微服务的流行。

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

三、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 操作和本地运行时代码上,此外解释型语言在允许我们将计算结果分布到许多机器上很有帮助。

四、CPU 时间就是瓶颈怎么办?

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

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

五、Python 更快吗?

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

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

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

六、如果运行时间确实有影响呢?

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

小结:

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

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

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

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

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

希望你喜欢此文,请点赞、转发、关注支持,谢谢老铁!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档