微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python pickle._dumps有效,而pickle.dumps失败

如何解决Python pickle._dumps有效,而pickle.dumps失败

我最近遇到了一个问题,我试图在类型为对象的对象上进行Pickle(Python 3.6): twilio.rest.chat.v2.service.channel.ChannelInstance(可以在here中找到其代码。)

相关代码就是这样:

picked_rv = pickle.dumps(value)

它将导致:TypeError: can’t pickle _thread.RLock objects在我们的服务器上 要么 AttributeError: Can't pickle local object 'init_logging.<locals>.NotProductionHandler' 在我的本地系统上。 RLockNotProductionHandler都是与ChannelInstance在同一环境中的对象,但实际上并没有被其引用,即,那些是我在调用Twilio时在相同上下文中实例化的对象并收回ChannelInstance

但是,一旦我尝试使用纯Python Pickle代替cPickle(或模块中的_pickle)dumps,如下所示:

picked_rv = pickle._dumps(value)

就可以了。谁能解释一下行为上的差异?我只是对错误和行为差异感到困惑。为什么cPickle会尝试在上下文中引入其他变量和对象,然后为什么纯Python实现会起作用?

Twilio 6.18.0上这不是问题,cPickle正常工作,但是我怀疑问题是Pickle。

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。