在运行时动态设置Python解释器优化

2024-01-01

经过一段时间在这里寻找重复项后,我发现唯一的事情是无操作并使用 Cython 进行优化,这是完全不相关的。我想要完成的是动态设置python -O运行时标记.

基本上,有一个值sys.flags.optimize这是只读的。我正在寻找一个选项来更改它或找到一个可以更改该值并影响字节码生成的位置。

根据doc https://docs.python.org/3/tutorial/modules.html#compiled-python-files官方方法是在解释器启动之前调用它,所以我想知道这是否可能,但这就是我发现的:

  • Python/compiler.c -> c_optimize https://github.com/python/cpython/blob/99b54d68172ad64ba3d0fdc0137f0df88c28ea2b/Python/compile.c#L161
  • optimization_level https://github.com/python/cpython/blob/8462a4936b3a551dc546a6adea04a70b0a07ca67/Python/initconfig.c#L1251通过环境变量在 C 中设置PYTHONOPTIMIZE
  • Lib/py_compile.py https://github.com/python/cpython/blob/2e33ecd7c9b0cac3efc6fcbdd4547fd086b4e2d1/Lib/py_compile.py#L79

这看起来像py_compile被称为“某处”(GitHub 搜索仅显示文档或测试,而不是运行时的实际调用者)并管理optimization_level in the compiler.c从上面。这意味着我可以在 Python 中更改它,并让编译的解释器在同一会话/进程中对经过或不经过优化的代码进行汇编。

我似乎找不到 CLI 参数解析,也找不到任何可以在运行时更改的相关“状态”。

我的目标(目前)是选择性地允许/删除assert可以通过以下方式完成关键字-O单独(通过compiler_assert() https://github.com/python/cpython/blob/99b54d68172ad64ba3d0fdc0137f0df88c28ea2b/Python/compile.c#L3256需要级别集,但是我正在努力寻找构建 AST 的 C 代码和似乎保持配置状态的实际 Python 代码之间的“缺失链接”(因为py_compile含有原料optimize值)并且似乎正在为解释器本身编译和加载字节码。

有什么办法可以改变optimization_level这样我就可以实现这种行为并且几乎可以在单个 Python 会话中完成此操作?

>>> # change optimize to 1
>>> def test(): assert True
>>> import dis
>>> dis.dis(test)
  1           0 LOAD_CONST               0 (None)
              2 RETURN_VALUE
>>> # change optimize to 0
>>> dis.dis(test)
  1           0 LOAD_CONST               1 (True)
              2 POP_JUMP_IF_TRUE         8
              4 LOAD_GLOBAL              0 (AssertionError)
              6 RAISE_VARARGS            1
        >>    8 LOAD_CONST               0 (None)
             10 RETURN_VALUE

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在运行时动态设置Python解释器优化 的相关文章

  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

    There are a great many existing Q A on Stack Overflow on this general theme but they are all either poor quality typical
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 在 RSpec 中调用相同的 rake 任务两次

    我正在尝试使用 rspec 测试 rake 任务 为此我需要调用它两次 但是 它只被调用一次 it first test do Rake Task my rake task invoke rake task was processed en
  • 将单击处理程序添加到 GWT 中的 Horizo​​ntalPanel

    如何添加点击处理程序HorizontalPanel 它与使用一起工作addDomHandler 在较新的 GWT 版本中 但我必须降级到不支持此功能的 GWT 2 0 4 我曾经这样做过 horizontalPanel getWidget
  • sqlite3 日期和间隔函数

    我想知道sqlite3是否支持间隔函数 以下语句被 PostgreSQL 接受 但 sqlite3 无法解析它 select from orders where and o orderdate lt date 1995 03 01 inte
  • 需要巧妙的想法:如何为不同的字体声明不同的大小? @字体脸?

    我从未见过这样做 但我有一种感觉 一定有一种聪明的方法可以做到这一点 css font size adjust 看起来从来都不是这样的 但是当我环顾四周时 我发现了一些非常巧妙的 css 技术 Take this http net tuts
  • cocoa touch中有没有好的HTML模板引擎? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在我的 iPhone 应用程序中 我想使用模板生成的一些 html 来填充 UIWebView 有没有像 jinja 或 smarty 这样的适用于
  • iOS 单元和 ui 测试中忽略了方案语言设置

    我的最终目标是发行 xcodebuild test 从命令行为不同的语言选择不同的方案 目前我有两个方案 它们之间唯一的区别是应用程序语言 在一种方案中是英语 在另一种方案中是西班牙语 如果我使用 Xcode 运行应用程序 它会很好地工作
  • 如何检查DLL依赖关系?

    有时 当我做一个小项目时 我不够小心 不小心添加了我不知道的 DLL 的依赖项 当我将此程序发送给朋友或其他人时 它不起作用 因为 某些 DLL 丢失了 这当然是因为程序可以在我的系统上找到 DLL 但不能在他们的系统上找到 有没有办法扫描
  • 在同步代码中实现需要 Task 返回类型的接口

    当实现一个返回一个接口的方法时Task
  • pandas:如何根据 X 列数是否大于某个数字来选择行?

    我可以用data data data gt 10 any 1 选择任意列大于 10 的行 如果我想选择任意 5 列大于 10 的行怎么办 以下内容应该适合您 data data data gt 10 count axis 1 gt 5 ex
  • 如何在emacs中使用[delete]键删除区域

    I am using Emacs 23 3 on Mac OS X Lion How can I delete the selected text region with simple key typing something like d
  • 如何在Python中获取网络接口卡名称?

    有没有办法获取机器中网卡的名称等 eth0 lo 如果是的话你会怎么做 我已经研究过 但到目前为止我只找到了获取IP地址和MAC地址的代码 例如 import socket socket gethostbyname socket getho
  • Apache Pulsar 函数的状态,如果我们不显式调用 deleteState,它会“永远”保留吗?

    当函数使用 context putState id object 时 保存的对象是否会永远保存在簿记员中 直到调用显式的 deleteState same id 为止 除了调用deleteState之外 是否有某个时间点 任何类型的某种操作
  • onPause 停止 LocationManager

    我想我这样做对吗 我有这段代码 它开始通过此处未显示的 MyLocationListener 方法查找我的 GPS 位置 该方法有效 但我想在暂停时停止 locationManager 我认为或者每当此活动不是当前的 但我无法获取删除更新代
  • 数据库中的数据格式值更改

    forms py DATE INPUT FORMAT d m Y m d Y class ReportForm forms ModelForm manual date forms DateField input formats DATE I
  • Ruby on Rails:对同一模型具有不同名称的两个引用

    我的应用程序有一个名为User 它包括电子邮件地址 用户名 我想创建一个模型Message它应该有两个字段sender and recipient 两者都引用了User模型 我试过这个 rails generate model Messag
  • 开发 Ruby gem 时如何添加“撬”

    我有一个叫做 某物 的宝石 我想在开发 gem 时添加 pry 作为开发依赖项 但我不知道如何加载它 如果我在 lib something rb 中有 需要某些东西 当我释放 gem 时 它会抛出一个 LoadError 因为 pry 只是
  • TAB 自动完成 python CLI

    我只是想知道是否可以编写一个在 shell 中运行的 Python 脚本 当用户点击 Tab 时可以向他们提供建议 例如 某些应用程序如何限制其支持的建议文件类型 我在 optParse 中没有找到任何可以做到这一点的东西 理想情况下是 m
  • HashMap 中的 Double

    我正在考虑使用 Double 作为 HashMap 的键 但我知道浮点比较是不安全的 这让我开始思考 Double 类上的 equals 方法也不安全吗 如果是 则意味着 hashCode 方法也可能不正确 这意味着使用 Double 作为
  • 当前身份(NT 机构/网络服务)没有写入权限

    我开发了一个简单的网络应用程序 一个标签和一个按钮 单击按钮时 标签将显示 Hello World 当我在 Web 服务器上部署此 Web 应用程序并访问 URL 时 收到此错误消息 当前身份 NT 权威 网络服务 不 有写权限 C Win
  • 在运行时动态设置Python解释器优化

    经过一段时间在这里寻找重复项后 我发现唯一的事情是无操作并使用 Cython 进行优化 这是完全不相关的 我想要完成的是动态设置python O运行时标记 基本上 有一个值sys flags optimize这是只读的 我正在寻找一个选项来