在python中加载时间和运行时间之间的差异?

时间:2011-07-23 20:31:10

标签: python time module loading

我引用了Python文档的一部分: “从.pyc或.pyo文件读取程序时,程序运行速度不比从.py文件读取时运行速度快;对.pyc或.pyo文件来说,唯一更快的是它们的速度装了。“

我不明白当它说它不影响运行时间而是加载时间时意味着什么?有人可以解释一下我能完全理解吗?

2 个答案:

答案 0 :(得分:3)

导入模块test.py时,Python必须读取源并将其转换为Python可以执行的字节码。这需要时间,但Python会将其存储在test.pyc中。这个字节码是将代码分解为能够直接在CPython虚拟机上运行的简单术语的结果。

如果加载test.pyc,Python在运行之前不需要将源代码编译为字节码,因此启动时间略短。

如果您导入模块test.py两次而不修改它或删除生成的test.pyc,Python会检查是否存在test.pyc并加载它 - 因此性能优势是自动的。

答案 1 :(得分:2)

将您编写的Python代码转换为计算机可以理解的指令有两个步骤:

  1. 编译步骤。原始Python代码转换为Python bytecode。任何操作系统上的Python解释器都可以在任何硬件上识别该字节码。这是存储在.pyo或.pyc文件中的内容。

  2. 解释步骤。 Python解释器,或者如果您更喜欢Python虚拟机,则解释字节码并将低级指令发送到计算机。这些低级指令在Linux和Windows之间,或者在Intel芯片和AMD之间都是不同的,所以有人必须为可以运行Python的每种类型的系统编写不同的解释器。

  3. 当您从.pyc文件运行代码时,步骤1已经完成,因此执行将直接执行到第2步。但是如果您在运行它之前立即编译它,则第2步的运行速度与运行时一样快。编译步骤是否会慢慢降低代码的速度取决于程序的功能。您应该尝试看看等待编译代码的差异有多大,但如果您编写的是简短的脚本,那么差异可能就不明显了。