6 个版本
0.4.0 | 2024年1月11日 |
---|---|
0.3.1 | 2023年7月23日 |
0.2.2 | 2023年7月18日 |
#336 在 文本处理 分类中
每月下载量 1,013
用于 3 个 包(2 个直接使用)
190KB
231 行代码(不含注释)
stream-rate-limiter
流组合器
.rate_limiter(opt: RateLimitOptions)
提供了一种使用恒定间隔限制流元素速率的方法。它增加了一些定制化选项,在标准解决方案(tokio-timer)中无法访问流延迟的情况下。
在使用此库之前,请考虑使用 tokio-timer 包(您可以查看 tokio_interval 示例)。
如果您需要以恒定间隔限制流速率,并添加额外的定制化(在流延迟情况下增加永久流延迟,防止在巨大波动后洪水般地填充流)。
例如,您想要以每秒1个元素的恒定速率产生一个元素流。您可以使用此库将速率限制设置为1个元素,例如接受1秒的延迟。因此,如果您的流在类似两秒的时间内卡住,您的事件不会洪水般地发生,而是以每秒一个元素的速率快速返回。您还可以在延迟太大时做出反应并关闭流。
案例分析
x 轴是元素编号,y 轴是时间,元素编号 40 被模拟为卡住 2 秒)
当您想在故障后延迟流时
stream::iter(0..101)
.rate_limit(
RateLimitOptions::empty()
.with_min_interval_sec(0.02)
.with_interval_sec(0.1)
.with_allowed_slippage_sec(0.5)
.on_stream_delayed(|sdi| StreamBehavior::Delay(sdi.current_delay)),
)
当您想允许流在故障后赶上时(继续选项)
stream::iter(0..101)
.rate_limit(
RateLimitOptions::empty()
.with_min_interval_sec(0.02)
.with_interval_sec(0.1)
.with_allowed_slippage_sec(0.5)
.on_stream_delayed(|_sdi| StreamBehavior::Continue),
)
当您想在故障后停止流时(停止选项):请注意,最后一个元素可能会出现,这取决于延迟是在 rate_limit 之前还是之后。故障可能发生在流的任何一边。此扩展 (.rate_limit) 不区分故障发生在何处。
stream::iter(0..101)
.rate_limit(
RateLimitOptions::empty()
.with_min_interval_sec(0.02)
.with_interval_sec(0.1)
.with_allowed_slippage_sec(0.5)
.on_stream_delayed(|_sdi| StreamBehavior::Stop),
)
依赖项
~2–3MB
~47K SLoC