[Crawler] 保证爬取最小间隔

在网络爬虫课程中介绍URL Frontier的时候 其中有个组件是back Queues - Single host Queues. 自己的理解就是把不同的URL按照domain放到不同的Queue里 在放入Queue的同时 会加入一个time stample去保证Back Queue Selector不会过于频繁抓取一个domain的网页, 课程中介绍的方法是用current_ts + time_gap, 想请教下 如果back Queue router在同一时刻连续向同一个host queue里push url,那么在同一时间点入队列的URL的 current_ts + time_gap都是一样或者十分接近, 假设其他queue都是空的, back queue selector等到了current_ts+time_gap到时候就会连续pop出来URL, 如何保证两两之间有最小间隔?或者说, 我们能在push的时候, 保证每个URL的expected timestaple是有最小间隔,比如说第一个是T1,第二个是T1+gap,但是back queue selector 在pop 第一个URL的时候是T2 > T1, 这样T1+gap-T2就小于gap了?

感谢提问!我把你的三个问题拆分成了三个主题,方便大家讨论和查询。
问题二问题三
这里的 current_ts 是 back queue selector 选取 URL 进行爬取的时间,而不是 push 进 back queue 的时间。对于同一个 single host queue 里的 URL,下一次爬取会在时间过去 current_ts + time_gap 之后。

明白了 是放进heap的时间, 谢谢!