1 个不稳定版本
0.1.0 | 2022年3月18日 |
---|
#5 in #periodically
188 每月下载量
12KB
217 行
Periodic Do
这是一个运行周期性任务的库
- 为你的领域特定数据类型
T
实现Job
特性,它表示要运行的任务 - 通过
tokio::sync::mpsc::channel
发送T
的实例到periodic_do::loop_forever
- 此库将定期对
T
进行两项检查- 这个
T
是否可以运行?如果是,则运行它并更新作业状态 - 这个
T
是否已达到终止状态?如果是,则将其遗忘
- 这个
项目状态
可用,但边缘粗糙,使用前请评估。
示例用法
use tokio;
#[tokio::main]
async fn main() -> Result<(), Error> {
let (sender, receiver) = tokio::sync::mpsc::channel(1000);
let unfinished_jobs = load_unfinished_jobs_from_database().await?;
// Start the scheduler
let capacity = periodic_do::Capacity {
max_running_jobs: 10,
sweep_sleep_seconds_default: 5,
sweep_sleep_seconds_min: 1,
sweep_sleep_seconds_max: 60,
};
tokio::spawn(async move {
periodic_do::loop_forever(
capacity, receiver, unfinished_jobs
).await
});
loop {
// T implements `Job` trait
let some_task: T = get_a_task_from_some_where().await;
sender.send(some_task).await
}
Ok(())
}
依赖项
~3.5–5MB
~84K SLoC