TypeError: cannot pickle ‘_thread.lock‘ object的一个浅层解决办法

所谓浅层解决办法,就是顾头不顾腚,绕过去再说,不是终极解决办法,不过有用咱就先用着。

我这是在使用scrapy爬虫的时候碰到的,发生的莫名其妙,前些天启动scrapy都好好的,突然就出毛病了,错误就是TypeError: cannot pickle '_thread.lock' object,熟悉python的都知道,pickle是python的一种序列化解决方案,但是在进入scrapy\crawler.py启动爬虫,读取配置的时候出错:

函数: _get_spider_loader
    return loader_cls.from_settings(settings.frozencopy())

根源出在copy.deepcopy(self)函数上,其在序列化操作时面对_thread.lock会无法序列化。

所以我简单修改了python\copy.py这个文件:

def _deepcopy_dict(x, memo, deepcopy=deepcopy):
    y = {}
    memo[id(x)] = y
    from icecream import ic
    for key, value in x.items():
        # y[deepcopy(key, memo)] = deepcopy(value, memo)
        if key not in ['_fork_lock', '_lock']:
            y[deepcopy(key, memo)] = deepcopy(value, memo)
        
    return y

其中循环中注释掉的那一行是原代码,做了一个简单的判断,对于_thread.lock和lock的不做操作,绕过去。

这显然不是去根的办法,不过应应急还是可以的。等我回头有时间了,看看有没有根治的办法吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值