4 个版本
0.1.3 | 2024 年 5 月 16 日 |
---|---|
0.1.2 | 2023 年 5 月 17 日 |
0.1.1 | 2023 年 4 月 4 日 |
0.1.0 | 2023 年 4 月 4 日 |
在 并发 中排名第 234
每月下载量 587
用于 rjob
17KB
294 行
tokio-cron
tokio-cron
是基于 Tokio 构建的简单 cron 调度器。
与替代方案相比,您可能为什么使用它
- 它大约有 200 行代码和最小依赖
- 它支持
tracing
以下是一个综合示例
use tokio_cron::{Scheduler, Job, daily};
use std::sync::atomic::{AtomicUsize, Ordering};
async fn simple_async_fn() {
println!("Hello, world!");
}
async fn async_fn_with_args(counter: Arc<AtomicUsize>) {
println!("Hello, world!");
}
#[tokio::main]
async fn main() {
// You can use a local (timezone) scheduler, or a UTC scheduler.
let mut scheduler = Scheduler::local();
// This counter is to show data sharing in action. It's not required.
// In a real environment, this might be a database connection pool, or other application state.
let counter = Arc::new(AtomicUsize::new(0));
// Add an async closure:
// Run a named job "increase-counter" every day at 8am.
let c = counter.clone();
scheduler.add(Job::named("increase-counter", daily("8"), move || {
let counter = c.clone();
async move {
counter.fetch_add(1, Ordering::SeqCst);
println!("Hello, world!");
}
}));
// Add a sync task:
scheduler.add(Job::new_sync("*/1 * * * * *", move || {
println!("Hello, world!");
}));
// Add a simple async function:
scheduler.add(Job::new("*/1 * * * * *", simple_async_fn));
// Add an async function with arguments:
let c = counter.clone();
scheduler.add(Job::new("*/2 * * * * *", move || {
async_fn_with_args(c.clone())
}));
tokio::time::sleep(std::time::Duration::from_secs(3)).await;
let result = counter.clone().load(Ordering::SeqCst);
println!("Counter: {}", result);
}
在 src/lib.rs
中查看测试以获取其他示例和用法。
依赖项
~5–12MB
~123K SLoC