python运行的原理_Python运行机制(转)
Python解释器简介
解释器是一种让其他程序运行起来的程序,它是代码与机器的计算机硬件之间的软件逻辑层,Python解释器就是能够让Python程序在机器上执行的一套程序。
当我们执行写好的Python代码时,Python解释器会执行两个步骤
1、把原始代码编译成字节码
编译后的字节码是特定于Python的一种表现形式,它不是二进制的机器码,需要进一步编译才能被机器执行,这也是Python代码无法运行的像C/C++ 一样快的原因。如果Python进程在机器上拥有写入权限,那么它将把程序的字节码保存为一个以.pyc 为扩展名的文件,如果Python无法在机器上写入字节码,那么字节码将会在内存中生成并在程序结束时自动丢弃。在构建程序的时候最好给Python赋上在计算机上写的权限,这样只要源代码没有改变,生成的.pyc文件可以重复利用,提高执行效率。
2、把编译好的字节码转发到Python虚拟机(PVM)中进行执行
PVM是 Python Virtual Machine的简称,它是Python的运行引擎,是Python系统的一部分,它是迭代运行字节码指令的一个大循环、一个接一个地完成操作。
Python 解释器的几种实现版本
Python解释器有三种主要的实现方式,CPython、Jython和IronPython 三种实现方式 。
1、CPython
CPython 是标准的实现,其它的都是有特定目标的。
CPython 是由C语言编写的,它是大多数Linux和Mac OS X机器预装的Python解释器,也是所有Python解释器中运行最快、最完整、最健全的。
2、Jython
Jython 是一种Python语言的替代实现方式,其目的是为了与Java编程语言集成,Jython 包含了Java类,这些类编译Python源代码、形成Java字节码,并将得到的字节码映射到Java虚拟机(JVM)上。因为Jython要比CPython 慢而且也不够健壮,它往往看作是一个主要面向寻找Java代码前端脚本语言的Java开发者的一个有趣的工具。
3、IronPython
IronPython 设计的目的是让Python 程序可以与Windows 平台上的.NET 框架以及与之对应的Linux的上开源的Mono编写成的应用集成。
Psyco 实时编译器
psyco 系统不是Python的另一种实现方式,而是Python字节码执行模块的一个扩展组件,它可以让程序运行的更快。它是一个PVM的增强工具,这个工具收集并使用信息,在程序运行时,可以将部分程序的字节码转换成底层的真正的二进制机器代码,从而实现更快的执行速度。在开发个过程中,Psyco无需代码的修改或独立的编译步骤即可完成这一转换。
概括地讲,就是当程序运行时,Psyco收集了正在传递过程中的对象的类别信息,这些信息可以用来裁剪对象的类型,从而生成高效的机器代码。机器代码一旦生成,就替代了对应的原始字节码,从而加快程序的整体执行速度。一些通过Psyco优化的Python代码的执行速度可以像编译好的C代码一样快。
因为字节码的转换与程序运行同时发生,所以Pysco往往被看做是一个即时编译器(JIT)。实际上Psyco是一个专有的JIT编译器:它生成机器代码将数据类型精简至你程序实际上所使用的类型。
Psyco是用纯Python的算法代码实现的。这点尤为重要,那些为了优化往往需要迁移到C的那部分代码,使用了Psyco后,这样的迁移就没有必要了。
python运行的原理_Python运行机制(转)相关推荐
- python文件闪退_python运行窗口闪退(python打开文件出现闪退什么原因)
有时候,我们在运行python程序的时候会闪退,到底是什么原因呢?python文件是以.py结尾的,可以自己在python环境下运行的.对于这种闪退的情况,大概可以从以下几个方面分析. 第一步 首先找 ...
- python程序的原理_Python程序的执行原理(转)
1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行. 2. 字节码 字节码在Python虚拟机程序里对应的是PyCo ...
- 简述python程序执行原理_Python程序的执行原理(1)
test.py的指令序列 func函数的指令序列 第一列表示以下几个指令在py文件中的行号; 第二列是该指令在指令序列co_code里的偏移量; 第三列是指令opcode的名称,分为有操作数和无操作数 ...
- python解析器原理_Python程序运行原理图文解析
本文研究的主要是Python程序运行原理,具体介绍如下. 编译型语言(C语言为例) 动态型语言 一个程序是如何运行起来的?比如下面的代码 #othermodule.py def add(a, b): ...
- python需要的环境_python运行环境是什么
1.准备好安装包 1)上python官网下载python运行环境(https://www.python.org/downloads/),目前比较稳定的是python-3.5.2 2)上pycharm官 ...
- python 运行时 变量_python运行过程,变量,符号
1,python运行过程 2,编译型,解释型 编译型, C, C++ ------>准备好的一桌子菜,直接吃 一次性把你的代码编译生成机器能够识别的二进制码 解释型: py ...
- python运行没有图_python – 运行没有图形的Salome脚本
我有类似的愿望,但经过多次搜索,我最终得出的结论是,我们都想做的事情并非完全可能. 为了在命令行上运行salome脚本而不使用GUI salome -t python script.py 或者干脆 s ...
- python cv2模块安装_Python运行脚本前,自动安装需要的模块包
在服务器上部署Python程序时,往往需要先安装很多需要的模块包.如果一个一个安装就会出现忘记的情况.或者新增加某个新的模块时,也可能会忘记安装. 这里先讲一下怎么通过Python程序自动安装. 以下 ...
- python对象底层原理_Python字符串对象实现原理详解
在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dic ...
最新文章
- php多表存储,php – MySql在一个单元格中存储另一个表的多个引用并选择它?
- Linux 的相关介绍
- 51信用卡 Android自动埋点实践
- matlab二进制操作,[转载]Matlab二进制类型数据相关操作
- 学linux做笔记本,linux学习之笔记本安装CentOS7
- VirtualBox – Error In supR3HardenedWinReSpawn 问题解决办法
- (转)java中使用memcache
- 2012年中国系统架构师大会 即将开幕
- php微博api发布微博代码,使用新浪微博API的OAuth认证发布微博实例
- kX3552 + HiFi级播放器 + wifi无线保真= 实战HiFi音乐娱乐欣赏
- python xlwt用法_24.python中xlwt模块用法详解
- 6.29--6.30郭天祥老师课程中的一些错误与我的存疑
- 几点个人信息安全感受
- 计算机键盘标注,电脑键盘上怎么打√和×
- http状态码全解读
- 如何制作公众号首图?教你一键套用图片模板
- 2022-2028年全球及中国汽车保险丝行业投资前景分析
- War3快捷键大全—常用的键
- IDEA的使用大全(快捷键、TomCat、Maven......)
- python 使用 numpy 判断两个向量是否平行
热门文章
- 没有shell63号单元_苏教版15年级数学上册第七单元整理与复习+同步练习
- python装饰器 property_python中property和setter装饰器用法
- 汉诺塔-递归算法深入理解
- 一文带你了解java面向对象的三大特性:继承、封装、多态
- 2020大学计算机知到答案,2020年_知到_大学计算机(济南大学)_网课答案
- c语言定义链式队列用菜单,数据结构之---C语言实现链式队列
- python oracle 运维,mysql oracle python连接
- Arduino--ESP8266物联网WIFI模块(贝壳物联)--数据上传服务器(单数据接口)
- java语言主要因为具备了,Java语言的魅力
- linux python默认安装目录_非root用户在linux服务器自己目录下安装需要的python版本及其模块...