正文

注意:本文除非特殊指明,”python“都是代表CPython,即C语言实现的标准python,且本文所讨论的是版本为2.7的CPython。

python为什么性能差:

当我们提到一门编程语言的效率时:通常有两层意思,第一是开发效率,这是对程序员而言,完成编码所需要的时间;另一个是运行效率,这是对计算机而言,完成计算任务所需要的时间。编码效率和运行效率往往是鱼与熊掌的关系,是很难同时兼顾的。不同的语言会有不同的侧重,python语言毫无疑问更在乎编码效率,life is short,we use python。

虽然使用python的编程人员都应该接受其运行效率低的事实,但python在越多越来的领域都有广泛应用,比如科学计算 、web服务器等。程序员当然也希望python能够运算得更快,希望python可以更强大。

首先,python相比其他语言具体有多慢,这个不同场景和测试用例,结果肯定是不一样的。这个网址给出了不同语言在各种case下的性能对比,这一页是python3和C++的对比,下面是两个case:

python运算效率低,具体是什么原因呢,下列罗列一些

第一:python是动态语言

一个变量所指向对象的类型在运行时才确定,编译器做不了任何预测,也就无从优化。举一个简单的例子: r = a + b。 a和b相加,但a和b的类型在运行时才知道,对于加法操作,不同的类型有不同的处理,所以每次运行的时候都会去判断a和b的类型,然后执行对应的操作。而在静态语言如C++中,编译的时候就确定了运行时的代码。

另外一个例子是属性查找,关于具体的查找顺序在《python属性查找》中有详细介绍。简而言之,访问对象的某个属性是一个非常复杂的过程,而且通过同一个变量访问到的python对象还都可能不一样(参见Lazy property的例子)。而在C语言中,访问属性用对象的地址加上属性的偏移就可以了。

第二:python是解释执行,但是不支持JIT(just in time compiler)。虽然大名鼎鼎的google曾经尝试Unladen Swallow 这个项目,但最终也折了。

第三:python中一切都是对象,每个对象都需要维护引用计数,增加了额外的工作。

第四:python GIL

GIL是Python最为诟病的一点,因为GIL,python中的多线程并不能真正的并发。如果是在IO bound的业务场景,这个问题并不大,但是在CPU BOUND的场景,这就很致命了。所以笔者在工作中使用python多线程的情况并不多,一般都是使用多进程(pre fork),或者在加上协程。即使在单线程,GIL也会带来很大的性能影响,因为python每执行100个opcode(默认,可以通过sys.setcheckinterval()设置)就会尝试线程的切换,具体的源代码在ceval.c::PyEval_EvalFrameEx。

第五:垃圾回收,这个可能是所有具有垃圾回收的编程语言的通病。python采用标记和分代的垃圾回收策略,每次垃圾回收的时候都会中断正在执行的程序,造成所谓的顿卡。infoq上有一篇文章,提到禁用Python的GC机制后,Instagram性能提升了10%。感兴趣的读者可以去细读。

来源于网络,如若侵犯您的权益,请留言联系我,我会第一时间处理!

为什么python性能差相关推荐

  1. python性能差_Python 性能分析大全

    虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚 ...

  2. python3性能还低吗_谁说Python性能差的?-- 让python比awk快 (3)

    在(2)中,提到了python字符串慢在了split函数.那既然已经知道这个bottleneck,现在就优化下. 初步思路是用C来定制一个提取第n列数的模块,然后替换我们的Python版本(1)中的s ...

  3. [转载] Python性能优化技巧总结

    参考链接: Python代码的优化技巧 欢迎加入Python学习交流群:535993938  禁止闲聊 ! 名额有限 ! 非喜勿进 ! 选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 pyth ...

  4. Python性能优化

    http://blog.csdn.net/pipisorry/article/details/39998317 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 perfo ...

  5. Python性能分析优化及测试

    Python性能分析优化及测试 写在前面 CPU分析工具 简单的time方法以及包装成的修饰器 timeit UNIX的time命令进行简单的计时 cProfile:分析每个函数运行花费的时间 lin ...

  6. python代码中疯狂print影响python性能吗?print是io吗?结论是做代码性能测试千万不要疯狂print,否则结果严重不准确,性能大幅下降。...

    很多人做性能测试,吧print打开,吧log调到debug级别并使用了streamhandler,那就会疯狂打印到控制台. 打印控制台会影响代码性能吗?这是毫无疑问的,python print会严重影 ...

  7. rust python扩展_Rust语言优化Python性能案例

    原标题:Rust语言优化Python性能案例 导读:Python 被很多互联网系统广泛使用,但在另外一方面,它也存在一些性能问题,不过 Sentry 工程师分享的在关键模块上用另外一门语言 Rust ...

  8. php和python对比-PHP和Python性能比较:放弃PHP改用Python

    PHP和Python性能比较:放弃PHP改用Python 来源:程序员人生 发布时间:2014-05-27 16:31:25 阅读次数:1367次 本文作者作为一名从事PHP开发11年的资深开发者,却 ...

  9. python3 性能提升_整理下Python性能语法,非常有效的提高性能的tips

    阅读 Zen of Python,在Python解析器中输入 import this. 一个犀利的Python新手可能会注意到"解析"一词, 认为Python不过是另一门脚本语言. ...

最新文章

  1. 遍历页面上所有的textBox
  2. 【学术相关】以前写过水论文怎么办?
  3. [Linux Mysql] Linux下Mysql的基本操作
  4. trc20地址监听php,Tron/USDT-TRC20对接PHP开发包 - 人人都是架构师
  5. 组合数学 —— 概述
  6. 声网 环信:是的,我们在一起了!
  7. 为什么手机网速太慢_手机明明是满格信号,为什么网速却非常慢?原来是这些功能在捣鬼...
  8. 使用 json 进行神经网络结构信息的格式化 (dump load)
  9. intel rst linux 驱动下载,Intel英特尔RST驱动 v 15.9.0.1015 官方版
  10. Jsp中getParameter、getParameterValues、getParameterNames和getParameterMap用法详解
  11. WhatsApp对话生成器使用教程
  12. 文件夹自动生成目录树(批处理)
  13. 车机安卓+linux成本,你的车机为什么比千元安卓机还难用?
  14. 卫生洁具安装工艺标准
  15. 适用选择并遮住抠人物头发丝
  16. 腾讯云Intel Xeon Cascade Lake 8255C(2.5 GHz)处理器性能评测
  17. go用函数字符串名调用函数
  18. python学习笔记之序列,内含列表和元组的常用方法
  19. cmd 查看端口占用并且结束进程【建议收藏】
  20. 服务器安全篇之一【网络安全】

热门文章

  1. Git上传文件代码到GitHub
  2. 课程向:深度学习与人类语言处理 ——李宏毅,2020 (P11)
  3. 发育中的小鼠大脑细胞与结构图谱
  4. python 画韦恩图(venn)代码(两组和三组数据),简单易学易上手
  5. Relative Uncertainty Learning for Facial Expression Recognition
  6. ubuntu终端中文显示问号或乱码解决办法
  7. linux服务器重启原因排查
  8. 【保研日记】本科统计学专业
  9. 大一 PTA L1-6 猜数字游戏
  10. html5期末大作业 基于HTML+CSS制作dr钻戒官网5个页面 企业网站制作