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 (将#修改为@)