#async-stream #stream #future #throttle #async #throttling

stream_throttle

提供 Stream 组合器,用于限制产生项的速度

6 个版本 (破坏性)

0.5.1 2023 年 9 月 5 日
0.4.0 2021 年 4 月 7 日
0.3.1 2020 年 2 月 9 日
0.2.1 2018 年 11 月 11 日
0.1.1 2018 年 5 月 31 日

#118 in 异步

Download history 18065/week @ 2024-04-27 13304/week @ 2024-05-04 17912/week @ 2024-05-11 18507/week @ 2024-05-18 19688/week @ 2024-05-25 21141/week @ 2024-06-01 14829/week @ 2024-06-08 17542/week @ 2024-06-15 20042/week @ 2024-06-22 17048/week @ 2024-06-29 11002/week @ 2024-07-06 11466/week @ 2024-07-13 12405/week @ 2024-07-20 10347/week @ 2024-07-27 10026/week @ 2024-08-03 8093/week @ 2024-08-10

每月 42,831 次下载
3 crate 中使用

MIT 许可

14KB
205

stream_throttle

提供 Rust Rust Stream 组合器,用于限制产生项的速度。

Crates.io API Documentation

关键特性

  • 节流通过 poll() 实现,而不是通过任何形式的缓冲。
  • 节流行为可以应用于 StreamFuture
  • 可以将多个流/未来作为一组进行节流。
  • 特性标志以使用各种定时器实现。

特性标志

  • timer-tokio: 使用 tokio::time::delay_for() 定时器。
  • timer-futures-timer: 使用 futures_timer::Delay 定时器。

如果你不使用默认定时器(tokio),请确保在将 stream_throttle 作为依赖项添加到 Cargo.toml 时设置 default-features = false

示例 Stream 节流

// allow no more than 5 items every 1 second
let rate = ThrottleRate::new(5, Duration::new(1, 0));
let pool = ThrottlePool::new(rate);

let work = stream::repeat(())
  .throttle(pool)
  .then(|_| futures::future::ready("do something else"))
  .for_each(|_| futures::future::ready(()));
  
work.await;

示例 Future 节流

let rate = ThrottleRate::new(5, Duration::new(1, 0));
let pool = ThrottlePool::new(rate);

let work = pool.queue()
  .then(|_| futures::future::ready("do something else"));
  
work.await;

依赖项

~0.7–2MB
~36K SLoC