| Crates.io | async-rate-limiter |
| lib.rs | async-rate-limiter |
| version | 1.1.0 |
| created_at | 2024-08-16 17:56:33.479101+00 |
| updated_at | 2024-08-20 01:24:03.895556+00 |
| description | Implements a token bucket algorithm that can be used to limit API access frequency. Written in pure Rust. |
| homepage | https://github.com/mindeng/async-rate-limiter |
| repository | https://github.com/mindeng/async-rate-limiter |
| max_upload_size | |
| id | 1340531 |
| size | 24,298 |
async-rate-limiter implements a token bucket algorithm that can be used to limit API access frequency.
Thanks to Rust’s async / await, this crate is very simple to use. Just put
your function call after
RateLimiter::acquire().await,
then the function will be called with the specified rate limit.
[RateLimiter] also implements Clone trait, so you can use it in
multiple tasks environment easily.
Update your Cargo.toml:
[dependencies]
# Change features to ["rt-async-std"] if you are using async-std runtime.
async-rate-limiter = { version = "1", features = ["rt-tokio"] }
Here is a simple example:
use async_rate_limiter::RateLimiter;
use std::time::Duration;
use tokio::spawn;
#[tokio::main]
async fn main() {
let rl = RateLimiter::new(3);
// You can change `burst` at anytime
rl.burst(5);
rl.acquire().await;
println!("Do something that you want to limit the rate ...");
let res = rl.try_acquire();
if res.is_ok() {
println!("Do something that you want to limit the rate ...");
}
// acquire with a timeout
let ok = rl.acquire_with_timeout(Duration::from_secs(10)).await;
if ok {
println!("Do something that you want to limit the rate ...");
}
// Concurrent use
let rl = rl.clone();
spawn(async move {
let res = rl.acquire_with_timeout(Duration::from_millis(340)).await;
assert!(res);
});
}
async-rate-limiter can support different async runtimes, tokio & async-std are supported currently. You can use features to switch async runtimes.