pyspider的爬取任务队列有没有数量限制

发布于 2022-09-05 15:00:54 字数 539 浏览 12 评论 0

数据库中存了大概一百万个url,我需要从数据库中取出这些url,并将它们加入到爬取的任务队列中去。
借用另一位同学的问题描述(只是我的情况更加极端):

@every(minutes=24 * 60)
def on_start(self):
    self.key_word_rank_page()
    pass



def key_word_rank_page(self):
    i = 0; page 参数从0开始的
    while i <= 1000000: 
        keywordrank_url = "https://www.douban.com/more/getmore.html?page=%s&genreIds="%(i)
        self.crawl(url=keywordrank_url, callback=self.process_keyword) 
        
        i += 1;
    pass
    

这样,会不会存在丢失任务(数据)的风险?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

撩人痒 2022-09-12 15:00:55

没有数量限制,但是存在三个瓶颈:

  1. 任务是先全部生成在内存中,再发送到队列的,会导致很高的内存占用。
  2. 队列有容量限制,一次发不完
  3. scheduler 为了防止拥塞,在一个处理周期只处理1000条新建任务。

所以建议还是分批发送

零崎曲识 2022-09-12 15:00:55

貌似在pyspider配置文件里,全局配置里可以增加 queue-maxsize 配置项,来配置最大队列容量。参见源码:

@click.option('--queue-maxsize', envvar='QUEUE_MAXSIZE', default=100,
              help='maxsize of queue')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文