3 个版本
使用旧的 Rust 2015
0.0.3 | 2018年1月7日 |
---|---|
0.0.2 | 2017年12月16日 |
0.0.1 | 2017年12月16日 |
#5 in #periodically
21KB
134 代码行,不包括注释
概述
RpmTimer (每分钟请求计时器) 是一个工具,可以将您的处理速度限制为每分钟的请求数量(例如请求)。
它旨在与任何速率限制的API一起使用。
入门指南
首先,您必须将此依赖项添加到您的 Cargo.toml
[dev-dependencies]
rpm-timer = "0.0.3"
然后,在您的 lib.rs
或 main.rs
文件中包含 rpm_timer
crate
extern crate rpm_timer;
最后,在您想要限制处理速度的模块中使用 RpmTimer
use rpm_timer::RpmTimer;
示例
为了避免不必要的内存分配,run
函数有两种版本。
run_slices
接受切片并将子切片传递给处理函数
extern crate rpm_timer;
use rpm_timer::RpmTimer;
fn send_slice(requests: Vec<String>) {
RpmTimer::default()
.rpm_limit(100.0)
.run_slice(&requests, send_http_requests);
}
fn send_http_requests(requests: &[&String]) {
// process all requests here
}
run_iter
接受任何迭代器,收集项目并将每个部分作为Vec
传递给处理函数:processing
extern crate rpm_timer;
use rpm_timer::RpmTimer;
fn send_slice(reader: BufReader) {
let lines = reader.lines();
RpmTimer::default()
.rpm_limit(100.0)
.run_iter(lines, send_http_requests);
}
fn send_http_requests(requests: Vec<Result<String, io::Error>>) {
// process all requests here
}
请检查 examples
目录以获取更详细的工作示例。
描述
RpmTimer
在滴答间隔内工作。您可以使用 tick
方法调整滴答长度。每个滴答它检查是否有任何空闲的工作线程(线程的数量可以用 max_threads
调整)以及应该处理多少项目以实现请求的速度。如果有需要处理的项目,RpmTimer
将它们收集到切片(在不分配版本中)或 Vec
(在分配版本中),并在并行中触发处理函数。
可视化
假设有2个工作线程和500毫秒的滴答时间。此外,假设在第2秒和第3秒之间存在延迟(例如,CPU忙于其他进程)
60 RPM
= 1 RPS
= 1
每秒1个请求
Time 0 0.5 1 1.5 2 2.5 3 3.5
Main Thread: |....X....X....X....X.........X....X..
Number of items 'ready' 1 0.5 1 0.5 1 2 0.5
Worker #1 1**********************.......2******.
Worker #2 ..........1**************.............
^ ^
| |- 2 items sent to the thread
|- an item is ready but no worker threads available
30 RPM
= 0.5 RPS
= 1
每两秒1个请求
Time 0 0.5 1 1.5 2 2.5 3 3.5
Main Thread: |....X....X....X..............X....X..
Number of items 'ready' 1 0.25 0.5 0.75 1 0.25 0.5 0.75
Worker #1 1***********..........................
Worker #2 ....................1************.....
图例
.
- 睡眠X
- 主线程的 tick*
- 忙于 # 请求
贡献
所有贡献和评论都热烈欢迎!不要害怕在发现错误或想改进此crate的想法时打开一个issue或PR。
许可证
MIT许可证
版权所有(c)2017 Marcin Sas-Szymański
特此授予任何人,免费、无限制地使用本软件及其相关文档文件(以下简称“软件”)的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,以及允许向其提供软件的个人这样做,但受以下条件限制
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的质量保证,无论是明示的还是暗示的,包括但不限于适销性、特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是在合同、侵权或其他法律行为中,无论源于、源于或与软件或其使用或其他交易有关。
依赖关系
~140KB