Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 刮擦-等待飞溅完成?_Python_Scrapy_Splash Screen - Fatal编程技术网

Python 刮擦-等待飞溅完成?

Python 刮擦-等待飞溅完成?,python,scrapy,splash-screen,Python,Scrapy,Splash Screen,下面是我的代码的简化版本。运行时,文本“完成”在“运行”之前打印很长时间: 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.tit

下面是我的代码的简化版本。运行时,文本“完成”在“运行”之前打印很长时间:

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')

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

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

另外,作为一个补充说明,在您的示例中,仅考虑生成器的工作方式,您在运行之后永远不会完成打印。请看一个最简单的例子:

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