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

前言:

多年前我第一次接触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 好),下面是一组数据来自一项研究论文:

untitled.png

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

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

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

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

7. 小结一下

最后,小结一下吧

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容