7个版本

0.2.6 2022年8月16日
0.2.5 2022年1月3日
0.2.3 2021年11月18日
0.1.0 2021年11月17日

#throttling 中排名第9

MIT许可证

14KB
99

throttle_my_fn:一个用于限制函数执行的Rust属性宏

License Crates.io docs.rs

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

    • MaybeUninitAtomicBool的使用替换为parking_lot::Mutexparking_lot::const_mutex
    • 感谢来自Rust Discord服务器@mejrs@veber-alex的反馈。
  • 0.1.0

    • 初始版本

依赖项

~1.6–2.2MB
~47K SLoC