热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python运行pyc文件_为什么主要的可运行Python脚本未编译为pyc文件(如模块)?python...

我了解,当您导入模块时,该文件会被编译成.pyc文件以使其更快?为什么主文件也未编译为.pyc?这会减慢速度吗?

我了解,当您导入模块时,该文件会被编译成.pyc文件以使其更快?为什么主文件也未编译为.pyc?这会减慢速度吗?那么将主文件保持得尽可能小会更好,还是没关系?

参考方案

加载模块时,会将py文件“字节编译”为pyc文件。时间戳记录在pyc文件中。

这样做不是为了使其运行更快,而是使其加载更快。

因此,在加载模块时使用“字节编译”模块是有意义的。

http://docs.python.org/tutorial/modules.html#compiled-python-files

[编辑:包括注释,参考文献]

从PEP 3147上的“字节码

汇编”:

CPython将其源代码编译为“字节码”,出于性能原因,

每当源文件发生更改时,它将在文件系统上缓存此字节代码。

由于编译阶段,这使得Python模块的加载速度更快

可以绕开。当您的源文件是foo.py时,CPython会缓存该字节

源代码旁边的foo.pyc文件中的代码。

字节码编译文件如何

根据Python版本进行跟踪

和“py”文件更改:

它还在已编译的字节码“.pyc”文件中插入一个幻数。

每当Python更改字节码格式时(通常在主要版本中),这种情况都会改变。

这样可以确保为早期版本的VM构建的pyc文件不会引起问题。

时间戳用于确保pyc文件与之前的py文件匹配

用于创建它。如果幻数或时间戳不匹配,

py文件将重新编译并写入新的pyc文件。

“pyc”文件在Python主要版本之间不兼容。当Python找到pyc

具有不匹配的幻数的文件,它会退回到速度较慢的

重新编译源代码。

这就是原因,如果您仅分发为同一平台编译的“.pyc”文件,则在python版本更改的情况下将无法再使用。

简而言之

如果有一个字节的已编译文件“.pyc”,并且时间戳指示该文件是最新的,则它将被加载,否则,明智的python将以较慢的方式加载“.py”文件。 “.py”文件的执行性能不会受到影响,但是“.pyc”文件的加载要比“.py”文件快。

考虑执行导入b.py的a.py

Typical total performance = loading time (A.py) + execution time (A.py) +

loading time (B.py) + execution time (B.py)

Since loading time (B.pyc)

You should see a better performance by using the byte compiled "pyc" files.

就是说,如果您有一个大型脚本文件X.py,则将其模块化并将内容移动到其他模块将导致字节码编译文件的加载时间减少。

另一个推断是,模块往往比脚本或主文件更稳定。因此,它根本不是字节编译的。

参考文献

http://effbot.org/zone/python-compile.htm

http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html

在Django中聚合save()? - python

我正在使用带有sqlite后端的Django,并且写入性能是一个问题。在某个阶段,我可能会毕业于“适当的”数据库,但是目前我仍然坚持使用sqlite。我认为我的写入性能问题可能与以下事实有关:我创建了大量行,并且大概每次save()一个行时,它都会锁定,解锁和同步磁盘上的数据库。如何将大量save()调用聚合到一个数据库操作中? 参考方案 编辑:不建议使用c…如何在Linux上安装2个Anacondas(Python 2.7和3.5)? - python

我想使用Python 2和3版本。我已经读过有关conda环境的用法,但是不断向终端source (de)activate py27写入内容似乎不方便。如picture所示,如何使用命令选择内核版本? 参考方案 您在该图像中寻找的是Jupyter Notebook。您需要使用Jupyter和所需的python版本创建环境:conda create -n py…为什么在for循环中将单词从复数形式转换为单数形式会花费这么长时间(Python 3)? - python

这是我的代码,用于从CSV文件读取文本并将一列中的所有单词从复数形式转换为单数形式:import pandas as pd from textblob import TextBlob as tb data = pd.read_csv(r'path\to\data.csv') for i in range(len(data)): blob …如何在“后台”中运行脚本的一部分(单个函数)? - python

我在具有以下基本结构(伪代码)的服务器上运行python脚本:for data_item in data_items: processed_result=process_data(data_item); #this takes time T0 upload_result_to_site(processed_result) #this takes time T…为什么在Python中根据@staticmethod选择模块级别的函数(根据Google样式指南)? - python

根据《 Google Python样式指南》,绝对不应(几乎)使用静态方法: 除非为了与 在现有库中定义的API。编写模块级功能 代替该建议背后的原因是什么?这是否仅适用于Google?还是在Python中使用静态方法还有其他(更一般的)缺点?尤其是,如果我想在将由该类的其他公共成员函数调用的类中实现实用程序功能,则最佳实践是什么?class Foo: ..…



推荐阅读
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文旨在探讨信息安全专业的职业规划路径,结合个人经历和专家建议,为即将毕业的学生提供实用的指导。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 利用PaddleSharp模块在C#中实现图像文字识别功能测试
    PaddleSharp 是 PaddleInferenceCAPI 的 C# 封装库,适用于 Windows (x64)、NVIDIA GPU 和 Linux (Ubuntu 20.04) 等平台。本文详细介绍了如何使用 PaddleSharp 在 C# 环境中实现图像文字识别功能,并进行了全面的功能测试,验证了其在多种硬件配置下的稳定性和准确性。 ... [详细]
author-avatar
人在做天在看1212_906
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有