pub struct Tiered { /* private fields */ }Expand description
广度优先的两层队列:模板降级的 URL 排在降级层,正常层空了才出队。 正常层按主机分队列(同 Heritrix 的每主机 work queue),主机之间轮流出队,跳过在途请求已满的主机 (同 Scrapy 的 DownloaderAwarePriorityQueue),一个主机排得再长也不会挡住其他主机。 总长度由调用方按爬取上限控制;满了以后新来的正常 URL 可以挤掉降级层最后面的一个。
Implementations§
Source§impl Tiered
impl Tiered
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
pub fn push(&mut self, learner: &Learner, url: Url, depth: usize)
Sourcepub fn pop(
&mut self,
learner: &Learner,
allow_low: bool,
busy: impl Fn(&str) -> bool,
) -> Option<(Url, usize, bool)>
pub fn pop( &mut self, learner: &Learner, allow_low: bool, busy: impl Fn(&str) -> bool, ) -> Option<(Url, usize, bool)>
下一个要抓的 URL,第三项表示是否来自降级层。正常层里模板已降级的顺手挪到降级层。
busy(host) 为真的主机这次跳过(在途请求已到上限)。
allow_low 为 false 时只出正常层:还有正常页面在抓或等重试,它们可能发现新的正常链接,
这时候抓降级的 URL 会白白占掉上限。
Sourcepub fn evict_low(&mut self, learner: &Learner) -> Option<Url>
pub fn evict_low(&mut self, learner: &Learner) -> Option<Url>
队列满了、又来了一个正常 URL:从降级层末尾挤掉一个,返回被挤掉的 URL(调用方从去重表里删掉它,
以后还能再进来)。降级层是空的就返回 None,新 URL 不入队。
pub fn iter(&self) -> impl Iterator<Item = (&Url, usize)>
Trait Implementations§
Auto Trait Implementations§
impl Forget for Tiered
impl Freeze for Tiered
impl Move for Tiered
impl RefUnwindSafe for Tiered
impl Send for Tiered
impl Sync for Tiered
impl Unpin for Tiered
impl UnsafeUnpin for Tiered
impl UnwindSafe for Tiered
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more