#periodic #task #state #periodically #job #terminal #running

periodic_do

周期运行任务,直到达到终止状态

1 个不稳定版本

0.1.0 2022年3月18日

#5 in #periodically

Download history 5/week @ 2024-04-13 3/week @ 2024-04-20 14/week @ 2024-05-11 7/week @ 2024-05-18 20/week @ 2024-06-08 45/week @ 2024-06-15 18/week @ 2024-06-22 13/week @ 2024-06-29 78/week @ 2024-07-13 60/week @ 2024-07-20 46/week @ 2024-07-27

188 每月下载量

MIT 许可协议

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