MPSC通道由同一循环填充与排空却无法终止的技术问题咨询及Web爬虫顺序实现相关说明
MPSC通道由同一循环填充与排空却无法终止的技术问题咨询及Web爬虫顺序实现相关说明
大伙好,今天想跟大家请教一个技术问题,先从Web爬虫的基础实现聊起,方便大伙理解背景。
我们常见的Web爬虫逻辑是这样的:从一个指定的入口链接启动,爬取页面时把发现的新链接加入专属队列,后续再依次处理队列里的这些链接。
顺序实现
下面是一个可以正常运行的Rust语言顺序爬虫实现示例:
async fn crawl_sequential(entry: &str) -> Result<()> { let url = reqwest::Url::parse(entry)?; // Pending URLs to Check let mut to_visit: Vec<Url> = vec![url.clone()]; // Already Check的内容 }
这个顺序实现的逻辑很直观,先解析入口URL并加入待访问队列,之后就能循环处理队列里的每个链接了。不过我最近碰到个棘手的问题:如果用MPSC通道来替代队列,但是在同一个循环里既往通道里塞数据又从通道里取数据,程序居然没办法正常终止,试了好几种调整都没解决,有没有懂行的朋友能帮忙分析下原因或者给点解决思路呀?
内容来源于stack exchange
相关产品推荐
相关产品推荐

