问题描述
我最近遇到了一个问题,我试图在类型为对象的对象上进行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 (将#修改为@)