Python 从Scrapy管道发出非阻塞HTTP请求

Python 从Scrapy管道发出非阻塞HTTP请求,python,scrapy,Python,Scrapy,据我所知,Scrapy是单线程的,但在网络端是异步的。我正在做一些需要从项目管道中调用外部资源的API的事情。有没有办法在不阻塞管道和减缓Scrapy爬行速度的情况下发出HTTP请求 谢谢您可以通过crawler.engine.crawl(请求,爬行器)将请求直接调度到crawler.engine。然而,要做到这一点,您需要在管道中公开爬虫程序: class MyPipeline(object): def __init__(self, crawler): self.cra

据我所知,Scrapy是单线程的,但在网络端是异步的。我正在做一些需要从项目管道中调用外部资源的API的事情。有没有办法在不阻塞管道和减缓Scrapy爬行速度的情况下发出HTTP请求


谢谢

您可以通过
crawler.engine.crawl(请求,爬行器)
将请求直接调度到
crawler.engine
。然而,要做到这一点,您需要在管道中公开爬虫程序:

class MyPipeline(object):
    def __init__(self, crawler):
        self.crawler = crawler

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler)

    def process_item(self, item, spider):
        if item['some_extra_field']:  # check if we already did below
            return item
        url = 'some_url'
        req = scrapy.Request(url, self.parse_item, meta={'item':item})
        self.crawler.engine.crawl(req, spider)
        raise DropItem()  # we will get this item next time

    def parse_item(self, response):
        item = response.meta['item']
        item['some_extra_field'] = '...'
        return item