Scrapy:在pipeline的process_item中的一个并发/线程安全方面的问题

JorringHsiao 发布于 02/10 17:35
阅读 39
收藏 0

如,一个将数据保存到excel文件的管道类,作为一个通用类,不写死Item类的判断过程,用dict来map类名和文件的关系,

outputs = {‘AAAAAItem’: dict(wb=wb, ws=ws), 'BBBBBItem': dict(wb=wb, ws=ws), ...}

所以对于这个dict来说,只有来了一个新的没见过的Item实例才会初始化与之对应的文件。

def process_item(self, item, spider):
    output = self.outputs.get(item.item_name)  # item_name换成type(item)也可以哈哈,一样滴
    if not output:
        # create file
        # ...
        output = dict(wb=wb, ws=ws)
        self.outputs[item.item_name] = output
    output['ws'].append([...])
    return item

那么问题来了,Item们并发怼到这个pipeline里,在第一次的创建文件的过程中,会有线程安全之类的问题吗?要加个双重检验锁咩?(懒得看它的源码是怎么调pipeline&自己些测试)

加载中
0
J
JorringHsiao

试了下,发现文件里有几行表头,是有线程安全问题的,还是要加个锁的哈哈哈哈哈哈哈哈,自己答了。。。

返回顶部
顶部