6 releases (breaking)
| 0.5.1 | Sep 5, 2023 |
|---|---|
| 0.4.0 | Apr 7, 2021 |
| 0.3.1 | Feb 9, 2020 |
| 0.2.1 | Nov 11, 2018 |
| 0.1.1 | May 31, 2018 |
#247 in Asynchronous
62,312 downloads per month
Used in 5 crates
14KB
205 lines
stream_throttle
Provides a
Rust
Stream
combinator, to limit the rate at which items are produced.
Key Features
- Throttling is implemented via
poll(), and not via any sort of buffering. - The throttling behaviour can be applied to both
Stream's andFuture's. - Multiple streams/futures can be throttled together as a group.
- Feature flags to use various timer implementations.
Feature Flags
timer-tokio: Uses thetokio::time::delay_for()timer.timer-futures-timer: Uses thefutures_timer::Delaytimer.
If you don't use the default timer (tokio), make sure to set default-features = false
in your Cargo.toml, when you add stream_throttle as a dependency.
Example throttling of 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;
Example throttling of 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;
Dependencies
~0.6–1.5MB
~26K SLoC