python中import 单例实现原理
前言
记录python使用过程下的理解,本文内容没有具体的佐证,简单记录一下。
一、python大批量编译运行时如何效率的提升?
Python 代码在执行时,会先由 Python 解析器翻译成 PyCodeObject 对象,俗称字节码 (Byte code),再由 Python 解释器来执行字节码,在该过程中翻译后的字节码是保存在内存中,程序运行结束就没了,而代码没有修改的情况下,每次生成的字节码是一样的,所以每次跑程序都再走一遍翻译字节码的过程有点浪费性能。
因此为了提高加载效率,Python 在程序执行结束后会把每个文件的字节码写入到硬盘中保存为 xxx.pyc 文件,这样下一次再执行这个程序时先在目录下找有没有xxx.pyc 文件,如果有这个对应文件且修改时间和xxx.py 文件的修改时间一样,就不用再执行翻译成字节码的过程,直接读取xxx.pyc 文件执行。其实缓存pyc 文件的方式对性能的提升很微小,只有项目文件非常多的时候才能看到显著提升。
二、import 会干嘛呢?
我们发现并不是所有的py 文件都会自动生成pyc 文件,只有被其他文件 import 过的文件才会生成对应的pyc 文件。可能 Python 认为被 import 的文件重复使用的概率比较高,而主文件一般只需要加载一次的的原因。
这也是为什么实现单例的原因,每次调用的时候会优先取出内存中的pyc文件。
有兴趣可以自己尝试一下!