Python解释执行原理
Python解释执行原理
C或C++之类的编译型语言是将源码编译成机器可以直接执行的二进制文件,当运行二进制可执行程序时,直接将二进制文件从硬盘载入内存中并运行。
Python执行源代码文件时,会先将源文件编译成字节码bytecode,然后再由Python虚拟机PVM
来执行这些字节码。
字节码
字节码在Python虚拟机程序里对应的PyCodeObject
对象。.pyc
是字节码在硬盘上的表现。
PyCodeObject对象的创建时机是模块加载的时候,即import。
pyc文件
- 当执行
python test.py
时,会将其编译成字节码后解释执行,但不会生成.pyc
文件。如果想生成test.pyc
,可以使用内置模块py_compile
- 如果test.py加载了其他模块,Python会对其他模块编译成字节码,生成
.pyc
文件。编译后的字节码.pyc
后缀文件保存至模块所在目录中的__pycache__
目录中。 - 当Python程序第二次执行时,会先在模块的
__pycache__
目录中查看pyc
文件,如果没找到,或者找到了,但是pyc
文件的修改时间和源模块的修改时间不同,则会重复第二步。
关于该设计方式的思考
- Python是否保存成pyc文件和我们在设计缓存系统时是一样的,我们可以仔细想想,什么该扔到缓存里,什么不该扔到缓存里。
- 在运行一个耗时的Python脚本时,如何能够稍微缩短一些程序的运行时间,就是将模块从主模块分开。
- 在设计一个软件系统时,重用和非重用的东西是不是也应该分开来对待,这是软件设计原则的重要部分。
- 在设计缓存系统(或者其他系统时),如何来避免程序的过期。