当前位置: 首页 > wzjs >正文

邢台移动网站建设价格有哪些企业网站平台

邢台移动网站建设价格,有哪些企业网站平台,网络公司排名及发展,酒店网站策划书一、什么是Rust中的Futures和Async? 在Rust中,异步编程基于future(未来)的概念。一个future表示一个当前可能不可用,但将来某个时候可以获得的值。Rust中的Future特征定义了这一概念,任何实现了该特征的类…

一、什么是Rust中的Futures和Async?

在Rust中,异步编程基于future(未来)的概念。一个future表示一个当前可能不可用,但将来某个时候可以获得的值。Rust中的Future特征定义了这一概念,任何实现了该特征的类型都表示一个future。

Rust中的异步编程关键元素包括:

  • asyncasync关键字标记函数或代码块,可以被中断并稍后恢复。当你标记一个函数为async时,它将返回一个Future,而不是直接返回结果。

  • awaitawait关键字用于在async函数中暂停函数的执行,直到待处理的future完成。

1.1.示例:并发地获取网页

让我们创建一个命令行程序,它并发地获取两个网页,提取它们的<title>元素,并打印第一个完成的网页的标题。我们将使用trpl crate,它提供了一个简化Rust异步编程的抽象,封装了像futurestokio这样的常见异步库。

1.2.设置项目

首先,我们需要设置一个新的Rust项目,并将trpl crate作为依赖项。

$ cargo new hello-async
$ cd hello-async
$ cargo add trpl

1.3.第一步:定义page_title函数

为了从网页中获取<title>元素,我们定义一个异步函数page_title。该函数将使用trpl::get方法发送HTTP GET请求到指定的URL并获取网页内容。然后,我们通过CSS选择器提取<title>元素。

这是page_title函数的实现:

use trpl::Html;/// 异步函数,获取指定URL页面的<title>元素
async fn page_title(url: &str) -> Option<String> {// 使用trpl库的get方法获取网页内容,text()方法返回网页的文本内容let response_text = trpl::get(url).await.text().await;// 解析HTML并查找<title>标签,返回标题内容Html::parse(&response_text).select_first("title")  // 使用CSS选择器查找第一个<title>元素.map(|title| title.inner_html())  // 如果找到了<title>,返回其内部HTML内容
}
1.3.1.解释:
  • 我们将函数标记为async,因为我们使用了异步操作,如获取URL (get(url)) 和读取响应体 (text()),这些都是异步操作。
  • get(url)text()都是异步操作,所以我们使用await等待它们完成。
  • 获取到响应后,我们解析HTML并使用select_first("title")方法查找第一个<title>元素。
  • 最后,我们返回<title>元素的内部HTML内容,即页面的标题,返回类型是Option<String>

1.4.第二步:在main函数中调用page_title

接下来,我们需要在main函数中调用page_title函数。然而,Rust不允许将main函数标记为异步函数,因此我们必须使用一个运行时来执行异步代码。我们可以使用trpl::run函数,它初始化异步运行时并运行page_title函数返回的future。

这是更新后的main函数:

fn main() {// 从命令行参数中获取两个URLlet url1 = std::env::args().nth(1).expect("Please provide the first URL");let url2 = std::env::args().nth(2).expect("Please provide the second URL");// 使用trpl::run运行一个异步代码块trpl::run(async {// 创建两个异步任务,分别获取两个URL的<title>元素let title_fut_1 = page_title(&url1);let title_fut_2 = page_title(&url2);// 使用race函数并发地执行两个任务,返回第一个完成的结果let result = trpl::race(title_fut_1, title_fut_2).await;// 根据race函数的结果打印第一个完成的页面标题match result {trpl::Either::Left(Some(title)) => println!("The title for {} is: {}", url1, title),trpl::Either::Right(Some(title)) => println!("The title for {} is: {}", url2, title),_ => println!("Could not fetch title for one or both URLs."),}});
}

1.5.第三步:竞速两个URL

在这个示例中,我们从命令行传入两个URL,分别获取它们的标题,并返回第一个完成的网页。我们使用trpl::race函数,它返回一个值,指示哪个future先完成。

1.5.1解释:
  • 我们并发地调用page_title函数,分别创建两个future:title_fut_1title_fut_2
  • 使用trpl::race等待哪个future先完成。它返回一个值,表示哪个future完成得更早,我们可以根据这个结果处理。
  • 使用match语句打印第一个完成的页面的标题。如果某个页面没有<title>标签,我们也会处理这种情况。

1.6.运行程序

要运行该程序,您需要提供两个URL作为命令行参数。下面是运行爬虫的示例:

$ cargo run -- https://www.rust-lang.org https://www.example.com

输出将显示第一个完成加载的页面的标题:

The title for https://www.rust-lang.org is: Rust Programming Language

1.7.理解Rust中的Async和Futures

在这个示例中,async关键字将函数转换为返回Future的函数,Future代表一个将在未来某个时刻可用的值。这是Rust中异步编程的基本概念。

  • 懒惰的Futures:在Rust中,futures是懒惰的,意味着它们不会在创建时立即执行,而是直到使用await显式等待它们时才会执行。这使得Rust能够优化异步任务并避免不必要的计算。

  • 状态机和执行器:每个async函数都被Rust编译器转换为一个状态机。这些状态机允许程序在await点暂停执行,并在未来某个时刻恢复。异步任务的执行由执行器管理,例如trpl::run函数所提供的执行器。

  • 并发性:通过让两个URL并发执行,我们利用了异步编程的优势,使程序比顺序执行更高效。

二、结论

我们成功地构建了一个简单的异步网页爬虫,能够并发地获取两个网页,并打印第一个完成的网页的标题。在这个过程中,我们学习了Rust中的异步编程的基本概念,包括futures、async/await和并发性。

通过使用trpl crate并理解Rust的异步系统工作原理,你现在可以创建更复杂的异步应用程序,充分利用Rust的并发模型。祝编程愉快!


文章转载自:

http://n6gRuXuL.wdcph.cn
http://VC4Rd6LK.wdcph.cn
http://2oqbdaKJ.wdcph.cn
http://ViPQY9Ca.wdcph.cn
http://FiTOBGts.wdcph.cn
http://vcXDN9TU.wdcph.cn
http://jkr6Ugaw.wdcph.cn
http://0NwunGfY.wdcph.cn
http://rsnQYpFH.wdcph.cn
http://9AGdhz8T.wdcph.cn
http://hHIEMw56.wdcph.cn
http://f18IFofD.wdcph.cn
http://Vfe2KfB8.wdcph.cn
http://eqPQPNMc.wdcph.cn
http://V0vPjcuA.wdcph.cn
http://3vBqoBm8.wdcph.cn
http://RzE8c6NC.wdcph.cn
http://IuOGd0PU.wdcph.cn
http://qpD5gL96.wdcph.cn
http://CLaXo02b.wdcph.cn
http://WJ3fxw27.wdcph.cn
http://9lwpuf70.wdcph.cn
http://y9CGIRlQ.wdcph.cn
http://pkqVlf91.wdcph.cn
http://RXpFy7Cr.wdcph.cn
http://PmGznojS.wdcph.cn
http://5LF4sQ5r.wdcph.cn
http://gU5y9rxm.wdcph.cn
http://pJWrfnq9.wdcph.cn
http://LTiOdBNN.wdcph.cn
http://www.dtcms.com/wzjs/759908.html

相关文章:

  • 官方网站app最新下载wordpress posts page
  • 东八区网站建设涉及部署未备案网站
  • dede分类信息网站小程序商城模板免费
  • 北京建设专职查询网站网页设计项目报告总结
  • 自然村 网站建设新手建站教程报价单
  • 百度申请完域名怎么建设网站企业需要做网站吗
  • 打开一个网站慢个人网站怎么建立步骤
  • 柳市外贸网站建设口碑营销案例ppt
  • 网站竞价推广怎么做做企业网站要多长时间
  • 福州网站制作做网站一定要会ps么
  • php开发网站优势python做网站的 框架
  • 东阳网站建设yw81怎么开网店详细步骤教程
  • 简单个人网站模板爱南宁app信息查看在哪里
  • 西双版纳北京网站建设济宁建设局网站
  • 揭阳企业建站程序亿唐网不做网站做品牌案例分析
  • 注册域名 不建网站网站建设 代码下载
  • 服装建设网站论文的目录制作网站
  • p2p网站开发 源代码证券公司怎么拉客户
  • 智能网站建设网站密码如何找回
  • 学校网站建设介绍wordpress get_pages
  • 苏州网站制作推广素马设计顾问讲解价格
  • 网站建设公司好坤思特重庆网站建设熊掌号
  • 提供做网站中国建行官网登录首页
  • 门户网站 模块360免费建站可以免费又永久吗
  • 成都网站设计费用全国文明网联盟网站建设
  • 创新的邯郸网站建设福田我要做网站优化比较好
  • 登录建设官方网站连国外网站慢
  • 做司考题的网站室内在线设计平台
  • 制作收款网站北京检查站优化
  • 网站建设怎么设置留言界面wordpress获取菜单