Python学习笔记之二——Python的运行机制,一般人肯定不会
python解释器简介
解释器是一种让其他程序运行起来的程序,它是代码与机器的计算机硬件之间的软件逻辑层,python解释器就是能够让python程序在机器上执行的一套程序。
当我们执行写好的python代码时,python解释器会执行两个步骤
- 把原始代码编译成字节码
编译后的字节码是特定于python的一种表现形式,它不是二进制的机器码,需要进一步编译才能被机器执行,这也是python代码无法运行的像c/c++ 一样快的原因。如果python进程在机器上拥有写入权限,那么它将把程序的字节码保存为一个以.pyc 为扩展名的文件,如果python无法在机器上写入字节码,那么字节码将会在内存中生成并在程序结束时自动丢弃。在构建程序的时候最好给python赋上在计算机上写的权限,这样只要源代码没有改变,生成的.pyc文件可以重复利用,提高执行效率。 - 把编译好的字节码转发到python虚拟机(pvm)中进行执行 ,另外如果你在python学习过程中。不懂的问题,可以去去小编的python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新python教程项目,多跟里面大佬交流。进步会更快!
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编译器:它生成机器代码将数据类型精简至你程序实际上所使用的类型。 另外如果你在python学习过程中。不懂的问题,可以去去小编的python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新python教程项目,多跟里面大佬交流。进步会更快!
psyco是用纯python的算法代码实现的。这点尤为重要,那些为了优化往往需要迁移到c的那部分代码,使用了psyco后,这样的迁移就没有必要了。