Expand description
A lock-free token bucket ratelimiter that can be shared between threads.
The ratelimiter uses scaled tokens internally for sub-token precision, allowing accurate rate limiting at any rate without requiring callers to tune refill intervals.
use ratelimit::Ratelimiter;
// 1000 requests/s, no initial tokens, burst limited to 1 second
let ratelimiter = Ratelimiter::new(1000);
// Custom burst capacity and initial tokens
let ratelimiter = Ratelimiter::builder(1000)
.max_tokens(5000)
.initial_available(100)
.build()
.unwrap();
// Rate of 0 means unlimited — try_wait() always succeeds
let ratelimiter = Ratelimiter::new(0);
assert!(ratelimiter.try_wait().is_ok());
// Sleep-wait loop
let ratelimiter = Ratelimiter::new(100);
for _ in 0..10 {
while let Err(wait) = ratelimiter.try_wait() {
std::thread::sleep(wait);
}
// do some ratelimited action here
}Structs§
- Builder
- Builder for constructing a
Ratelimiterwith custom settings. - Ratelimiter
- A lock-free token bucket ratelimiter.