Python 碎屑项目管道并行或顺序执行流程项目

Python 碎屑项目管道并行或顺序执行流程项目,python,scrapy,Python,Scrapy,我正在开发一种刮皮蜘蛛,它成功地生产了一些物品。应该使用pymysql将这些项插入到数据库中。因为数据是关系型的,所以对于每一项,我都必须执行一些插入语句。 我想在每次插入后调用connection.commit(),以确保发生的错误不会导致数据库中的条目不一致 我现在想知道scrapy是为多个项目并行调用process\u item,还是为一个项目接着一个项目依次调用。如果是后者,我可以简单地使用以下方法: def process_item(self, item, spider): #

我正在开发一种刮皮蜘蛛,它成功地生产了一些物品。应该使用pymysql将这些项插入到数据库中。因为数据是关系型的,所以对于每一项,我都必须执行一些插入语句。 我想在每次插入后调用
connection.commit()
,以确保发生的错误不会导致数据库中的条目不一致

我现在想知道scrapy是为多个项目并行调用
process\u item
,还是为一个项目接着一个项目依次调用。如果是后者,我可以简单地使用以下方法:

def process_item(self, item, spider):
    # execute insert statements
    connection.commit()
如果scrapy同时执行了对
process\u item
的多个调用,则可以在未完全插入另一项时调用末尾对
commit()
的调用

各国:

spider刮取项目后,将其发送到项目管道,该管道通过顺序执行的多个组件对其进行处理

但我不太确定这是否意味着
process\u item
永远不会并行执行,或者只是不同的管道总是一个接一个地执行(例如删除重复项->更改某些内容->插入数据库)


我认为
process\u item
将按顺序执行,如文档所示:

class DuplicatesPipeline(object):

def __init__(self):
    self.ids_seen = set()

def process_item(self, item, spider):
    if item['id'] in self.ids_seen:
        raise DropItem("Duplicate item found: %s" % item)
    else:
        self.ids_seen.add(item['id'])
        return item
在这段代码中,没有同步将id添加到所涉及的
ids\u seen
,但是我不知道这个示例是否简化了,因为它只演示了如何使用管道。

设置的文档指定以并行方式处理项目(至少在单个响应中)。我认为将其设置为
1
可能对您的情况有所帮助


我在这方面不是专家,但我相信。

谢谢,不知怎的,我还没有看到这个选项!只是好奇,但你找到了答案?!