Python:使用“copyreg”为已有减速器的类型定义减速器

2024-02-21

(请记住,我正在使用 Python 3 工作,因此解决方案需要在 Python 3 中工作。)

我想使用copyreg教 Python 如何 pickle 函数的模块。当我尝试这样做时,_Pickler对象仍然会尝试使用 pickle 函数save_global功能。 (这不适用于未绑定的方法,这就是这样做的动机。)

这好像是_Pickler首先尝试审视自己dispatch在查看之前要选择要腌制的对象的类型copyreg.dispatch_table。我不确定这是否是故意的。

我有什么方法可以告诉Python使用我提供的reducer来pickle函数吗?


以下 hack 似乎适用于 Python 3.1...:

import copyreg
def functionpickler(f):
  print('pickling', f.__name__)
  return f.__name__

ft = type(functionpickler)
copyreg.pickle(ft, functionpickler)

import pickle
pickle.Pickler = pickle._Pickler
del pickle.Pickler.dispatch[ft]

s = pickle.dumps(functionpickler)
print('Result is', s)

其中,两条黑客线是:

pickle.Pickler = pickle._Pickler
del pickle.Pickler.dispatch[ft]

您需要删除dispatch函数类型的条目,否则它会抢占 copyreg 注册;我认为您无法在 C 编码的 Pickler 上执行此操作,因此您需要将其设置为 Python 编码的 Pickler。

子类化会少一些麻烦_Pickler拥有一个属于你自己的班级dispatch(复制父类并删除函数类型的条目),然后专门使用您的子类(及其转储方法)而不是pickle.dump;然而,与泡菜本身的猴子修补相比,它也不太方便。

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

Python:使用“copyreg”为已有减速器的类型定义减速器 的相关文章

随机推荐

  • 在 varchar 字段而不是数字字段上使用 BETWEEN ?

    我正在使用 ColdFusion 8 和 SQL Server 2008 R2 我正在尝试查询一列值以获取值在一定范围内的行 该列应该是数字 但事实并非如此 它被设置为 varchar 由其他人 有 100 000 多行数据 这是数据的假样
  • 使用正则表达式删除脚本标签

    我正在尝试使用我在该网站中找到的正则表达式 但它似乎不起作用 有任何想法吗 输入字符串 sFetch 123456 Regex sFetch Regex Replace sFetch
  • 将存储为文本数据类型的数字转换为 int

    我有一个导入结果的数据库 数据库是可交付的 我没有自己进行导入 也无法访问原始数据来自己进行导入 也就是说 有一个整数值被导入到文本数据类型中 所有存储的值都是有效整数 我不断得到 Explicit conversion from data
  • Ionic 3 - 键盘无缘无故地将内容向上推,并超越其他内容

    我正在 Ionic 中开发一个简单的应用程序 我有一个问题 键盘将我的输入字段向上推到另一个 div 上 而键盘有足够的空间 我该如何解决 我已经在互联网上浏览过 但无法找到解决我的问题的任何方法 发生的情况是这样的 正如您所看到的 文本在
  • 来自 POST 的 res.redirect

    由于某种原因 登录完成后我无法重定向到 blog 在我的登录控制器中 我有以下内容 module exports post function req res var login req body login if login req bod
  • sudo: python: 找不到命令

    我要实现sudo python找到Python 3 我遇到了一个奇怪的问题 在终端中输入python version给了 3 6 但是sudo python version给了2 7 经过尝试一些事情后我终于卸载了 2 7sudo apt
  • jQuery 用于获取表行上的 Click 事件

    我有下表 table tr class rows td cell1 td td cell2 td tr table 如果我点击了 如何设置警报消息any of the column of 使用jquery 您可以使用委托来获得更好的性能 它
  • JavaScript 中这个东西是什么?

    考虑 var something wtf null omg null 自从我上次使用 JavaScript 编程以来 我的 JavaScript 知识仍然非常零碎 但我想我现在已经重新学习了大部分知识 除了这个 我不记得以前见过这个 它是什
  • 如何映射对象的键以使 JSON 更容易在 React 中处理

    如果我有这个 JSON name Active user config status active name Paused user config status active 然后我可以渲染一个 React 组件并轻松访问数据 render
  • jenkins pipelines:shell脚本无法获取更新的环境变量

    在 Jenkins 中 我想获取用户输入并传递给 shell 脚本以供进一步使用 我尝试设置为环境变量 但shell脚本无法获取最新值 旧值是echo pipeline agent none environment myVar someth
  • Rails 中按月和年对记录进行分组

    我使用的是 Ruby 1 9 2 Rails 3 0 x 并且使用 MySQL DB 我有一个消息模型 每天都可以发布新消息 我有一个索引操作 我想在其中显示按月份和年份分组的这些消息 这主要用于过滤消息 我的查询如下所示 active m
  • 我实际上如何从方法外部获取异步 Web 请求的响应?

    我有点困惑 我正在尝试以异步方式发布到我的网络服务 理想情况下我想启动请求 在 UI 上显示加载微调器 然后当异步请求完成时处理响应 并且如果有错误则显示错误 或对结果进行其他操作 这是我的代码 我在这里调用请求并传递一些数据 privat
  • md5 目录树中的所有文件

    我有一个结构如下的目录 Test txt Test1 Test1 txt Test1 copy txt Test1a Test1a txt Test1a copy txt Test2 Test2 txt Test2 copy txt Tes
  • 如何在qsub中指定错误日志文件和输出文件

    我有一个 qsub 脚本 submit job sh bin sh N job1 t 1 100 cwd SEEDFILE home user1 data1 SEED sed n e SGE TASK ID p SEEDFILE home
  • 如何在 CloudFormation 中指定签名的 S3 URL 作为模板?

    在 AWS CloudFormation 中 您可以通过上传模板文件或指定模板的 S3 URL 来指定模板 指定 Amazon S3 模板 URL 如果存储桶是公共的 您可以构造一个 URL 供任何人访问该对象 模板 只要 S3 模板 UR
  • Ellipsize 属性在 Android 4.0 上不起作用

    我目前正在 Android 4 0 Ice Cream Sandwich 上测试一个应用程序 然后再向市场发布更新 在测试过程中 我意识到椭圆形属性停止工作 我在列表视图上使用它来截断太长的项目标题 在 Android 2 3 7 上 一切
  • oracle中的子选择

    我正在尝试从子选择中的另一个表中选择最新价格 但我不知道如何让它发挥作用 这是我尝试过的 select something somthingelse select from select QUOTE PRICE as old price f
  • Android Firebase:无法解析

    我尝试将 Firebase 与我的应用程序连接 但出现了此错误 这是我的 build gradle 项目 Top level build file where you can add configuration options common
  • createReadStream() 抛出 RangeError:上传文件时超出最大调用堆栈大小

    我正在尝试使用 Apollo 服务器Upload直接将文件发送到 S3 的标量 我的架构 const gql require apollo server express module exports gql extend type Muta
  • Python:使用“copyreg”为已有减速器的类型定义减速器

    请记住 我正在使用 Python 3 工作 因此解决方案需要在 Python 3 中工作 我想使用copyreg教 Python 如何 pickle 函数的模块 当我尝试这样做时 Pickler对象仍然会尝试使用 pickle 函数save