zoukankan      html  css  js  c++  java
  • Python 程序 运行过程

     

    .  Python 解释器

           Python 是一门编程语言,同时也是一个解释器的软件包。 解释器是一种让其他程序运行起来的程序。 当你编写了一段Python 程序,Python 解释器将读取程序,并按照其中的命令执行,得出结果。解释器是代码与计算机硬件之间的软件逻辑层。

           Python 包安装后,它包含了一些最小化的组件: 一个解释器和支持的库。 根据使用情况的不同,Python 解释器可能采取可执行程序的形式,或者作为链接到另一个程序的一系列库。 按照使用的Python 版本的不同,解释器本身可以用C程序实现,或者一些Java 类实现,或者其他形式。 无论采用哪种形式,编写的python代码必须在解释器中运行,所以,要运行Python,必须先安装Python 解释器。

     

    .  Python 程序执行过程

     

    2.1 字节码编译

           当程序执行时,Python 内部(对大多数用户是完全隐藏的)会先将源代码编译成字节码的形式。 编译是一个简单的翻译过程,而且字节码是源代码底层的,与平台无关的表现形式。 概括的说,Python 通过把每一源语句分解为单一步骤来将这些源语句翻译成一组字节码指令。 这些字节码可以提高执行速度,比起文本文件中的原始代码语句,字节码的运行速度要快很多。

           翻译过程对用户来说是隐藏的,如果Python 进程在机器上有写入的权限,那么它将程序的字节码保存为一个以.pyc为扩展名的文件,pyc文件就是编译过的py源文件。 当程序运行后,会在相同的目录下查看这些pyc文件。

           Python 这样保存字节码是作为一种启动速度的优化。 在下一次运行程序时,如果在上次保存字节码之后没有修改过源代码,Python将会加载pyc 文件,并跳过编译这个步骤。 pyhon 必须重新编译时,它会自动检查源文件的时间戳,如果又保存了源代码,下次程序运行时,字节码将自动重新创建。

           如果Python 无法在机器上写入字节码,程序仍然可以工作,此时字节码将会在内存中生成并在程序结束时简单丢弃。 尽管这样,由于pyc 文件能够加速启动,对于大型程序,应该给与python写入权限,如果保存了pyc文件,能加速程序的程序。

     

     

    2.2  Python 虚拟机(PVM

           一旦程序编译成字节码或者字节码从已经存在的pyc 文件中载入,之后的字节码被发送到称为Python虚拟机(Python Virtual Machine)上来执行。 PVM 就是迭代运行字节码指令的一个大循环,一个接一个地完成操作。 PVM Python 的运行引擎,它时常表现为Python系统的一部分,并且它是实际运行脚本的组件。 这步操作也就是Python 解释器的最后步骤。

     

    2.3 性能

           CC++这类完全编译语言需要build 或者make,但是Python 字节码不是机器的二进制代码,不需要进行make的步骤。

           这也是Python代码无法运行得像C或者C++代码一样快的原因,因为PVM循环仍然需要解释字节码,并且字节码指令与CPU指令相比需要更多的工作。 和其他经典的解释器不同,这里仍有内部的编译步骤:python 并不需要反复地重分析和重分解每一行语句,实际的效果就是纯Python 代码的运行速度介于传统的编译语言和传统的解释语言之间。

     

     

     

     

     

     

    整理自网络

    ------------------------------------------------------------------------------

    Blog http://blog.csdn.net/tianlesoftware

    网上资源: http://tianlesoftware.download.csdn.net

    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx

    DBA1 群:62697716(); DBA2 群:62697977()

    DBA3 群:62697850   DBA 超级群:63306533;    

    聊天 群:40132017

    --加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

  • 相关阅读:
    金融新手投标模块布局小Demo
    jQuery序列化Ajax提交表单
    javascript实现jsonp跨域问题+原理
    javascript返回顶部插件+源码
    mime中间件
    移动端meta标签的设置
    Node环境下实现less编译
    diogo谈框,仿prompt()方法布局
    linux驱动程序框架基础
    C/C++下Netbeans的配置
  • 原文地址:https://www.cnblogs.com/Hiberniane/p/2488506.html
Copyright © 2011-2022 走看看