如何解决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'
在我的本地系统上。 RLock
和NotProductionHandler
都是与ChannelInstance
在同一环境中的对象,但实际上并没有被其引用,即,那些是我在调用Twilio时在相同上下文中实例化的对象并收回ChannelInstance
。
但是,一旦我尝试使用纯Python Pickle代替cPickle(或模块中的_pickle)dumps
,如下所示:
picked_rv = pickle._dumps(value)
就可以了。谁能解释一下行为上的差异?我只是对错误和行为差异感到困惑。为什么cPickle会尝试在上下文中引入其他变量和对象,然后为什么纯Python实现会起作用?
在Twilio 6.18.0上这不是问题,cPickle正常工作,但是我怀疑问题是Pickle。
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。