Loading

Python解释执行原理

Python解释执行原理

C或C++之类的编译型语言是将源码编译成机器可以直接执行的二进制文件,当运行二进制可执行程序时,直接将二进制文件从硬盘载入内存中并运行。

Python执行源代码文件时,会先将源文件编译成字节码bytecode,然后再由Python虚拟机PVM来执行这些字节码。

字节码

字节码在Python虚拟机程序里对应的PyCodeObject对象。.pyc是字节码在硬盘上的表现。

PyCodeObject对象的创建时机是模块加载的时候,即import。

pyc文件

  1. 当执行python test.py时,会将其编译成字节码后解释执行,但不会生成.pyc文件。如果想生成test.pyc,可以使用内置模块py_compile
  2. 如果test.py加载了其他模块,Python会对其他模块编译成字节码,生成.pyc文件。编译后的字节码.pyc后缀文件保存至模块所在目录中的__pycache__目录中。
  3. 当Python程序第二次执行时,会先在模块的__pycache__目录中查看pyc文件,如果没找到,或者找到了,但是pyc文件的修改时间和源模块的修改时间不同,则会重复第二步。

关于该设计方式的思考

  1. Python是否保存成pyc文件和我们在设计缓存系统时是一样的,我们可以仔细想想,什么该扔到缓存里,什么不该扔到缓存里。
  2. 在运行一个耗时的Python脚本时,如何能够稍微缩短一些程序的运行时间,就是将模块从主模块分开。
  3. 在设计一个软件系统时,重用和非重用的东西是不是也应该分开来对待,这是软件设计原则的重要部分。
  4. 在设计缓存系统(或者其他系统时),如何来避免程序的过期。
posted @ 2021-06-19 19:57  吃了好多肉  阅读(374)  评论(0编辑  收藏  举报