首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Scrapy:非阻塞暂停

Scrapy:非阻塞暂停
EN

Stack Overflow用户
提问于 2016-05-02 22:18:03
回答 3查看 3.6K关注 0票数 22

我有个问题。我需要停止函数的执行一段时间,但不能停止整个解析的实现。也就是说,我需要一个非阻塞的暂停。

它看起来像这样:

class ScrapySpider(Spider):
    name = 'live_function'

    def start_requests(self):
        yield Request('some url', callback=self.non_stop_function)

    def non_stop_function(self, response):
        for url in ['url1', 'url2', 'url3', 'more urls']:
            yield Request(url, callback=self.second_parse_function)

        # Here I need some function for sleep only this function like time.sleep(10)

        yield Request('some url', callback=self.non_stop_function)  # Call itself

    def second_parse_function(self, response):
        pass

函数non_stop_function需要停止一段时间,但它不应该阻塞输出的其余部分。

如果我插入time.sleep() -它会停止整个解析器,但我不需要它。是否可以使用twisted或其他方法停止一个函数?

原因:我需要创建一个非阻塞函数,它将每隔n秒解析一次网站页面。在那里,她将获得urls并填充10秒钟。已经获得的URL将继续工作,但主要功能需要休眠。

更新

感谢TkTechviach。一个答案帮助我理解了如何创建一个挂起的Request,第二个答案是如何激活它。这两个答案是相辅相成的,我为Scrapy做了一个很好的非阻塞暂停:

def call_after_pause(self, response):
    d = Deferred()
    reactor.callLater(10.0, d.callback, Request(
        'https://example.com/',
        callback=self.non_stop_function,
        dont_filter=True))
    return d

并对我的请求使用此函数:

yield Request('https://example.com/', callback=self.call_after_pause, dont_filter=True)
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36984696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档