7个版本
0.2.6 | 2022年8月16日 |
---|---|
0.2.5 | 2022年1月3日 |
0.2.3 | 2021年11月18日 |
0.1.0 |
|
在 #throttling 中排名第9
14KB
99 行
throttle_my_fn
:一个用于限制函数执行的Rust属性宏
throttle_my_fn
是一个Rust属性宏,用于限制函数在指定时间段内的运行次数,即使从多个线程调用也是如此。
此属性宏的主要用例是速率限制,例如避免在线服务遭受冲击,或避免在一段时间内处理过多的请求。
该宏通过重写函数并添加必要的节流(见下文Usage
)来实现。生成的函数是线程安全的。
使用方法
将必要的依赖项添加到您的Cargo.toml
[dependencies]
throttle_my_fn = "0.2"
parking_lot = "0.11"
或者,使用cargo add
$ cargo add throttle_my_fn
$ cargo add parking_lot
包含宏
use throttle_my_fn::throttle;
标记您想要节流的函数
#[throttle(10, Duration::from_secs(1))]
pub(crate) fn run_10_times_per_second(arg: &str) -> String {
...
}
#[throttle(1, Duration::from_millis(100))]
pub(crate) fn run_once_per_100_milliseconds(arg: &str) -> String {
...
}
请注意,函数签名已被修改,将返回类型包装在Option
中,如下所示
pub(crate) fn run_10_times_per_second(arg: &str) -> Option<String> {
...
}
pub(crate) fn run_once_per_100_milliseconds(arg: &str) -> Option<String> {
...
}
返回的Option<T>
表示函数是否已执行。
变更日志
-
0.2.6
- 修复具有2+个参数的函数的编译错误。
-
0.2.5
- README修复。
-
0.2.4
- 忽略示例文档测试。
- 更新关于添加
parking_lot
作为依赖项的文档。
-
0.2.3
- 将此变更日志部分添加到README中。
-
0.2.2
- 关于线程安全的文档更新。
-
0.2.1
- 关于此crate可能用例的文档更新。
- 感谢来自Rust Linz Discord服务器
@not-matthias
的反馈。
-
0.2.0
- 将
MaybeUninit
和AtomicBool
的使用替换为parking_lot::Mutex
和parking_lot::const_mutex
。 - 感谢来自Rust Discord服务器
@mejrs
和@veber-alex
的反馈。
- 将
-
0.1.0
- 初始版本
依赖项
~1.6–2.2MB
~47K SLoC