【问题标题】:python optimized modepython优化模式
【发布时间】:2011-01-04 13:29:09
【问题描述】:

Python 可以在优化模式 (-O) 下运行脚本,该模式会关闭诸如断言之类的调试,如果我记得的话,还可以删除文档字符串。我没有看到它真正使用过,也许它只是过去的产物。是否被使用?做什么的?

为什么 Python 3 中没有删除这个无用的东西?

【问题讨论】:

  • 好问题,但不知道为什么要删除它!

标签: python


【解决方案1】:

python -O 当前执行以下操作:

  • 完全忽略断言
  • 将特殊的内置名称 __debug__ 设置为 False(默认为 True)

当被称为 python -OO

  • 从代码中删除文档字符串

不知道为什么大家都忘了提__debug__这个问题;也许是因为我是唯一一个使用它的人 :) if __debug__ 构造在 -O 下运行时根本不会创建字节码,我发现这非常有用。

【讨论】:

    【解决方案2】:

    如果您分发任何仅包含.pyo 文件的存档表单,它会节省少量内存和少量磁盘空间。 (如果您经常使用assert,并且可能在复杂的情况下,节省的费用可能不小,也可以扩展到运行时间。

    所以,它绝对不是无用——当然它正在被使用(如果你将一个 Python 编码的服务器程序部署到大量 N 台服务器机器上,为什么永远 em> 您是否想浪费 N * X 个字节来保留任何人都无法访问的文档字符串?!)。当然,如果它节省更多会更好,但是,嘿-不要浪费,不要!-)

    因此,在 Python 3 中保留此功能(无论如何提供都非常简单,你知道;-)几乎是不费吹灰之力——为什么还要在后者的采用困难中添加“epsilon”?-)

    【讨论】:

      【解决方案3】:

      不同 Linux 发行版中的预打包软件通常使用 -O 进行字节编译。例如,对于 python 应用程序,如果来自 Fedora packaging guidelines

      过去,%ghost .pyo 文件的常见做法是为了节省用户文件系统上的少量空间。但是,这有两个问题: 1. 对于 SELinux,如果用户正在运行 python -O [APP],它会在 .pyos 不存在时尝试编写它们。这会导致日志中出现 AVC 拒绝记录。 2. 如果系统管理员运行 python -OO [APP] 将创建没有文档字符串的 .pyos。有些程序需要文档字符串才能运行。在随后使用 python -O [APP] 运行时,即使请求了不同的优化级别,python 也会使用缓存的 .pyos。解决此问题的唯一方法是找出 .pyos 的位置并删除它们。

      当前处理 pyo 文件的方法是按原样包含它们,没有 %ghosting。

      【讨论】:

        【解决方案4】:

        删除断言意味着小的性能优势,因此您可以将其用于“发布”代码。无论如何,没有人使用它,因为许多 Python 库都是开源的,因此 help() 函数应该可以工作。

        所以,只要这个模式下没有任何真正的优化,你可以忽略它。

        【讨论】:

        • “删除断言意味着小的性能优势”这取决于您在断言中添加的内容。如果您使用断言作为调试辅助工具(如预期的那样)来验证您的假设,您实际上可能会进行大量检查(例如矩阵不等式)。在这种情况下,您绝对不希望那些在生产代码中运行
        猜你喜欢
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 2019-05-17
        • 2019-01-10
        • 1970-01-01
        • 2012-04-21
        • 2023-02-19
        • 2012-03-08
        相关资源
        最近更新 更多