python优化模式

时间:2010-01-13 09:21:00

标签: python

Python可以在优化模式(-O)下运行脚本,关闭调试,如assert,如果我还记得删除文档字符串。我没有看到它真的使用过,也许它只是过去时代的神器。它被使用了吗?做什么的?

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

4 个答案:

答案 0 :(得分:44)

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

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

当被称为python -OO

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

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

答案 1 :(得分:33)

如果您分发任何仅包含.pyo个文件的存档表单,它会节省少量内存和少量磁盘空间。 (如果您经常使用assert,并且可能使用复杂的条件,那么节省的费用可能并不简单,并且可以延长到运行时间。)

所以,它肯定不是无用的 - 当然它正在被使用(如果你将Python编码的服务器程序部署到大量N台服务器机器上,为什么永远你想浪费N * X字节来保存那些无论如何都无法访问的文档字符串吗?!)。当然,如果它能保存更多会更好,但是,嘿 - 不要浪费,不要! - )

因此,保持这种功能(在任何情况下都很容易提供,你知道;-)在Python 3中 - 为什么甚至将“epsilon”添加到后者的采用困难中是非常明智的? - )

答案 2 :(得分:6)

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

  

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

     

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

答案 3 :(得分:4)

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

因此,只要在此模式下没有任何真正的优化,您就可以忽略它。