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

Download history 177/week @ 2024-05-02 281/week @ 2024-05-09 413/week @ 2024-05-16 137/week @ 2024-05-23 218/week @ 2024-05-30 159/week @ 2024-06-06 310/week @ 2024-06-13 235/week @ 2024-06-20 303/week @ 2024-06-27 235/week @ 2024-07-04 242/week @ 2024-07-11 129/week @ 2024-07-18 143/week @ 2024-07-25 130/week @ 2024-08-01 85/week @ 2024-08-08 205/week @ 2024-08-15

每月下载量 587
用于 rjob

MIT 许可证

17KB
294

GitHub Contributors Stars Build Status Downloads Crates.io

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