Jiang's Tech Journal

Jiang's Tech Journal

首页
分类
关于
Login →
Jiang's Tech Journal

Jiang's Tech Journal

首页 分类 关于
Login
  1. Home
  2. Rust
  3. [Rust] 多线程并发访问

[Rust] 多线程并发访问

0
  • Rust
  • Published at 2025-01-16
  • Read 51 times
Jiang
Jiang
Table of Contents
No Table of Contents
// main.rs
use futures::future::join_all;
use reqwest::Client;
use std::sync::Arc;
use tokio::sync::Semaphore;
use tokio::task; // 引入join_all

#[tokio::main]
async fn main() {
    let client = Client::new();
    let semaphore = Arc::new(Semaphore::new(3000)); // 每次最多并发 3000 个任务
    let total_requests = 100000; // 总共 1000 个请求

    let mut tasks = Vec::new();

    for _ in 0..total_requests {
        let client = client.clone();
        let permit = semaphore.clone().acquire_owned().await.unwrap(); // 获取信号量许可

        // 创建异步任务
        let task = task::spawn(async move {
            let res = client
                .get("网址")
                .send()
                .await;

            match res {
                Ok(response) => {
                    println!("请求成功,状态码:{}", response.status());
                }
                Err(e) => {
                    eprintln!("请求失败:{}", e);
                }
            }

            drop(permit); // 释放信号量许可
        });

        tasks.push(task);
    }

    // 使用join_all来处理所有任务并确保它们都完成
    let results = join_all(tasks).await;

    // 处理任务结果
    for result in results {
        if let Err(e) = result {
            eprintln!("任务执行失败:{:?}", e);
        }
    }

    println!("所有请求已完成");
}
// Cargo.toml
[package]
name = "world_hello"
version = "0.1.0"
edition = "2021"

[dependencies]
reqwest = { version = "0.11", features = ["json"] }
tokio = { version = "1", features = ["full"] }
futures = "0.3"
serde = { version = "1.0", features = ["derive"] }

Related Posts

[Rust] Rust语言圣经

https://course.rs/

[Rust] 模块与文件分离

我们可以让模块不再平铺在目录里面,把他移入文件文件夹中。 src ├── front_of_house │ └── hosting.rs ├── front_of_house.rs └── lib.rs //lib.rs mod front_of_house;//导入当前目录下的front_of

[Rust] 多线程并发访问

// main.rs use futures::future::join_all; use reqwest::Client; use std::sync::Arc; use tokio::sync::Semaphore; use tokio::task; // 引入join_all #[tokio

Table of Contents
No Table of Contents
Copyright © 2024 your company All Rights Reserved. Powered by Halo.