В Scrapy есть понятие конвейеров элементов, которые одновременно обрабатывать (через Twisted) элементы, возвращенные из Scrapy Паук. Следующий пример кода предназначен для фильтрации повторяющихся элементов (код скопирован ниже). Как получается, что set
можно безопасно использовать для одновременных вызовов process_item
? Похоже, что Scrapy вызывает конвейеры элементов здесь .
from scrapy.exceptions import DropItem
class DuplicatesPipeline:
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