Scrapy - 等待 Splash 完成?

Scrapy - wait for Splash to finish?

下面是我的代码的简化版本。 运行时,文本'FINISHED'打印很长一段时间之前'RUNNING':

import scrapy
from scrapy_splash import SplashRequest

class ExtractSpider(scrapy.Spider):
    name = 'extract'
    start_urls = ['SomeURL']

    def parse(self, response):

        url_list = response.css('a.title::attr(href)').extract()
        for url in url_list:
            splash_args = {
                        'html': 1,
                        'png': 1,
                        'render_all': True,
                        'wait': 0.5
                    }
            yield SplashRequest(url, self.parse_result, endpoint='render.json', args=splash_args)
        print('FINISHED')

    def parse_result(self, response):
        print('RUNNING')

我想这与后台线程 运行ning 有关 - 但想知道是否有任何方法可以在进入下一个代码之前检查函数是否已完成?例如,Print('FINISH')?

之前的某种 if 语句

Scrapy 使用异步代码(即独立处理请求),因此恕我直言,没有简单的方法可以实现这一点。您只能判断一个单独的请求是否已完成并且发生在 parse_result 方法中(当然,如果处理没有错误)。

此外,作为旁注,在您的示例中,您不会在 运行 之后打印 FINISHED考虑发电机的工作方式。看最简单的例子:

>>> def foo():
...   for i in range(5):
...     yield i
...   print 'Finished'
>>>
>>> [x for x in foo()]
Finished
[0, 1, 2, 3, 4]