1 个不稳定版本
0.1.0 | 2024年2月12日 |
---|
#973 在 并发
39KB
632 行
Grizzly Cron Scheduler
一个简单易用的调度器,建立在 Tokio 之上,允许您使用 cron 表达式(可选的随机模糊偏移)调度异步任务。
任务可以是两种类型
- 并行:如果上一个运行尚未完成且新的触发时间已到达,则此作业的两个实例可以同时运行。
- 顺序:下一次运行作业将不会开始,直到上一个运行完成,因此可能会跳过一些触发。
替代方案
- tokio cron scheduler:维护良好且功能丰富,但不支持模糊调度或区分并行和顺序作业。
功能
- 调度并行和顺序作业
- 使用 cron 表达式调度作业
- 与 Tracing 集成以进行日志记录
- 给每个触发时间添加随机模糊偏移
- 例如,如果作业配置为在每分钟的30秒运行,则可以添加5秒的模糊偏移,因此作业将在每分钟的25秒到35秒之间随机运行
示例
use std::sync::Arc;
use grizzly_scheduler::scheduler::Scheduler;
let scheduler = grizzly_scheduler::scheduler::Scheduler::new_in_utc();
let important_shared_state = Arc::new(5);
let cloned_state = important_shared_state.clone();
let job_id = scheduler.schedule_parallel_job(
"*/5 * * * * *", // run the job on every second divisible by 5 of every minute
Some("Example Parallel Job".to_string()), // this name will appear in the tracing logs
Some(chrono::Duration::seconds(2)), // we want the fuzzy effect of maximally +/-2 seconds
move ||
{
let cloned_state = cloned_state.clone();
async move {
tracing::info!("We are using our important shared state! {}", cloned_state);
}
},
).unwrap();
scheduler.start().unwrap();
许可
此项目使用 MIT 许可证,可在 LICENSE 文件中找到。
贡献
欢迎所有贡献!请随时提出问题或发起拉取请求。
依赖项
~6–14MB
~146K SLoC