1 个不稳定版本
0.0.1 | 2018年12月28日 |
---|
#24 in #v0
在 quick_crawler 中使用
8KB
60 行
ratelimit_futures - 将限流器作为 Rust future (v0.1)
这个crate提供了一个与tokio兼容的限流实现(使用ratelimit_meter)。
查看文档以获取详细信息和使用示例。
lib.rs
:
为 futures 提供限流。
这个crate将ratelimit_meter crate与futures v0.1(目前由Tokio支持的同一版本)连接起来。
使用 futures 限流的用法与机制
要使用此 crate 的 Future 类型,请使用提供的 Ratelimit::new
函数。它接受一个直接限流器(内存中的限流器实现),并返回一个可以连接到您要执行的实际工作的 Future
use futures::prelude::*;
use futures::future::{self, FutureResult};
use ratelimit_meter::{DirectRateLimiter, LeakyBucket};
use ratelimit_futures::Ratelimit;
use std::num::NonZeroU32;
let mut lim = DirectRateLimiter::<LeakyBucket>::per_second(NonZeroU32::new(1).unwrap());
{
let mut lim = lim.clone();
let ratelimit_future = Ratelimit::new(&mut lim);
let future_of_3 = ratelimit_future.and_then(|_| {
Ok(3)
});
}
{
let mut lim = lim.clone();
let ratelimit_future = Ratelimit::new(&mut lim);
let future_of_4 = ratelimit_future.and_then(|_| {
Ok(4)
});
}
// 1 second will pass before both futures resolve.
在这个例子中,我们正在构建只有在共享的限流器表示可以开始时才能开始工作的 futures。
您可能可以猜出使用这些限流 futures 的机制
- 使用
.and_then
将您的任务连接到它们。 - 为需要计数限流的任务构造一个单一的限流器。您可以使用它们的
Clone
特性来共享它们。 - 限流 futures 将等待直到达到允许代码继续执行的点。如果共享限流器已经允许另一段代码继续执行,则等待时间将延长。
依赖关系
~200KB