python为啥运行效率不高

即使在单线程,GIL也会带来很大的性能影响,因为python每执行100个opcode(默认,可以通过sys.setcheckinterval()设置)就会尝试线程的切换,具体的源代码在ceval.c::PyEval_EvalFrameEx。第五:垃圾回收,这个可能是所有具有垃圾回收的编程语言的通病。python采用标记和分代的垃圾回收策略,每次垃圾回收的...
python为啥运行效率不高
原因:1、python是动态语言;2、python是解释执行,但是不支持JIT;3、python中一切都是对象,每个对象都需要维护引用计数,增加了额外的工作。4、python GIL;5、垃圾回收。
当我们提到一门编程语言的效率时:通常有两层意思,第一是开发效率,这是对程序员而言,完成编码所需要的时间;另一个是运行效率,这是对计算机而言,完成计算任务所需要的时间。编码效率和运行效率往往是鱼与熊掌的关系,是很难同时兼顾的。不同的语言会有不同的侧重,python语言毫无疑问更在乎编码效率,life is short,we use python。
虽然使用python的编程人员都应该接受其运行效率低的事实,但python在越多越来的领域都有广泛应用,比如科学计算 、web服务器等。程序员当然也希望python能够运算得更快,希望python可以更强大。
首先,python相比其他语言具体有多慢,这个不同场景和测试用例,结果肯定是不一样的。这个网址给出了不同语言在各种case下的性能对比,这一页是python3和C++的对比,下面是两个case:
从上图可以看出,不同的case,python比C++慢了几倍到几十倍。
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机器学习(Mooc礼欣、嵩天教授)
2020-10-12
1.Python是动态语言
动态语言是一类在运行时可以改变其结构的语言,如新的函数、对象、代码可以被引入,已有的函数可以被删除或其他结构上的变化等,该类语言更具有活性,但是不可避免的因为运行时的不确定性也影响运行效率。
2.Python是解释执行
相比于C语言编译性语言编写的程序,Python是解释执行语言,其运行过程是Python运行文件程序时,Python解释器将源代码转换为字节码,然后再由Python解释器来执行这些字节码。其每次运行都要进行转换成字节码,然后再由虚拟机把字节码转换成机器语言,最后才能在硬件上运行,与编译性语言相比,其过程更复杂,性能肯定会受影响。
3.Python中一切都是对象
Python是一门面向对象的编程语言,其设计理念是一切皆是对象,如数字、字符串、元组、列表、字典、函数、方法、类、模块等都是对象,包括代码,每个对象都需要维护引用计数,因此,增加了额外工作,影响了性能。
4.Python GIL
GIL是Python最为诟病的一点,因为GIL,Python中的多线程并不能真正的并发,即使在单线程,GIL也会带来很大的性能影响,因为python每执行100个opcode就会尝试线程的切换,因此,影响Python运行效率。
5.垃圾回收
Python采用标记和分代的垃圾回收策略,每次垃圾回收的时候都会中断正在执行的程序,造成所谓的顿卡,影响运行效率。
2022-08-01
Python的优点
Python语言简洁易学,开发效率高。Python代码行数少,可读性强,开发人员在编写代码时可以更快地实现功能。此外,Python还具有丰富的库和模块,可以方便地实现很多功能。这些优点使得Python适用于快速原型开发和小型项目。
Python的缺点
Python运行速度相对较慢。这是因为Python是一种解释型语言,代码需要在解释器中逐行解释执行。与编译型语言相比,Python需要更多的时间来执行相同的任务。此外,Python的内存管理机制也会影响运行效率。Python使用垃圾回收机制管理内存,这会导致一些内存泄漏问题,影响运行效率。
Python的优化方法
虽然Python运行速度不如编译型语言,但是可以通过一些优化方法来提高Python的运行效率。以下是一些常用的优化方法:
①使用NumPy和SciPy库。这两个库是Python中的科学计算库,它们可以使用C语言编写的底层算法,提高了Python的运行速度。
②使用JIT编译器。JIT编译器可以将Python代码转换为机器码,提高了Python的运行速度。
③使用Cython。Cython是一种Python的扩展语言,可以将Python代码转换为C语言代码,提高了Python的运行速度。
④使用PyPy。PyPy是一种Python解释器,使用即时编译技术,提高了Python的运行速度。
2023-11-17
mengvlog 阅读 7 次 更新于 2025-07-19 18:21:05 我来答关注问题0
  •  深空见闻 python操作数据库效率为什么低

    Python操作数据库效率低的原因主要有Python的执行速度相对较慢、数据库连接问题、查询优化不足以及GIL(Global Interpreter Lock)问题。1. Python的执行速度相对较慢 Python是一种解释执行的语言,这意味着它在运行时需要逐行解释代码,而不是像编译型语言那样将代码编译成机器码后执行。这种解释执行的机制在...

  • 一、编程入门难度较高。Python虽然是较为容易上手的编程语言之一,但对于完全没有编程基础的学习者来说,其语法和一些编程思想可能在一开始就显得较为抽象,不易理解。特别是对于一些逻辑思维不太灵活的人来说,学习Python可能会遇到较大的困难。二、执行效率相对较低。Python是一种解释型语言,相对于编译...

  •  文暄生活科普 为什么不建议学python

    首先,Python在性能上并不出色。对于有C++经验的开发者来说,Python的执行速度相对较低。在解决同样问题时,C++可能只需一秒,而Python可能需要十几秒,这在追求效率的项目中可能显得不足。其次,Python的语法设计有时会让人困惑。Python2和Python3版本之间存在兼容性问题,这种语言版本的不稳定性在其他语言...

  • Python简化了许多编程任务,但是对于一些时间敏感的任务,它的表现经常不尽人意。使用C/C++或机器语言的外部功能包处理时间敏感任务,可以有效提高应用的运行效率。这些功能包往往依附于特定的平台,因此你要根据自己所用的平台选择合适的功能包。简而言之,这个窍门要你牺牲应用的可移植性以换取只有通过对底...

  • 综上所述,Python多进程效能的优化与任务的特性和运行环境紧密相关。在任务数量多、计算密集型且能够充分利用多核架构时,多进程能显著提升性能。反之,对于简单或少量任务,多进程可能不如单进程高效。因此,在应用多进程时,需仔细权衡任务特性、环境限制以及期望的性能提升,以实现最优的资源利用和效率...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部