Python字节码编译以及PVM
Python字节码编译
执行程序时,Python内部会先将源代码(我们在文件编写的Python语句)编译成所谓的字节码形式,编译就是一个翻译的作用,字节码是一种低级的,与平台无关的表现形式,也就是说:Python通过先将我们的源代码逐一分解为单一步骤,然后再将这些单一步骤翻译成一组字节码指令,翻译的目的是提高执行速度,相对于原代码,字节码的运行速度要快很多。
上面所说的翻译过程我们是不可见的,是完全对我们隐藏的,但是我们可以观察到有一个在Python源文件的目录下有一个同名的.pyc文件生成(如果Python进程在所在的机器上拥有写入权限的话)。.pyc文件是Python将源文件通过字节码编译过后的文件。Python这样保存字节码也是作为对启动速度的一种优化,如果在下一次程序运行的时候,在上次保存字节码之后并没有修改源文件中的代码,且是同一个Python编译器来运行,那么Python会直接加载.pyc文件,而不再去重新编译源文件。Python会自动检查源文件和字节码的最后一次修改的时间戳,确实其是否需要重新编译,如果有修改源代码,那么字节码将重新创建并编译。
如果Python进程没有拥有在所在的机器上的写入权限,那么就无法创建字节码,但是程序任然可以正常运行,那是因为字节码会在内存中生成,并且在程序执行之后直接丢弃,但是之前说到.pyc文件可以加速启动应用程序,所以最好可以保证大型程序拥有写入权限。同时,如果只有字节码.pyc文件,而没有.py文件,Python任然是可以运行相关程序的。
最后,字节码其实是对导入(导入的本质就是载入另一个文件并给予读取那个文件内容的权限)的优化,也就是说,只有在源文件中有import的文件才会生成字节码。
PVM-Python虚拟机
一旦程序编译成字节码,之后的字节码会发送到PVM,也就是Python虚拟机上来执行,PVM不是一个独立的程序,不需要进行安装。实质上讲:PVM就是迭代运行字节码指令的一个大循环,一个接一个的完成操作,PVM是Python运行时的引擎,边限为Python系统的一部分,并且是实际运行的脚本组件。

图参考了Python学习手册

浙公网安备 33010602011771号