7 个版本

0.3.2 2024年6月18日
0.3.1 2023年7月3日
0.3.0 2021年5月22日
0.2.1 2021年5月10日
0.1.1 2021年5月10日

异步 类别中排名第 78

Download history 2938/week @ 2024-05-03 3442/week @ 2024-05-10 3333/week @ 2024-05-17 3805/week @ 2024-05-24 3409/week @ 2024-05-31 2833/week @ 2024-06-07 3273/week @ 2024-06-14 2011/week @ 2024-06-21 1776/week @ 2024-06-28 2043/week @ 2024-07-05 2051/week @ 2024-07-12 1901/week @ 2024-07-19 2549/week @ 2024-07-26 2294/week @ 2024-08-02 2144/week @ 2024-08-09 2227/week @ 2024-08-16

每月下载量 9,628
用于 20 个软件包5 个直接使用)

MIT 许可证

47KB
1.5K SLoC

MIT licensed Version Code Coverage Downloads

此软件包提供用于调度周期性任务的库。它受到 Python 的 schedule 库的启发,并提供了类似的 API。它基于 tokio(版本 1)和 chrono 库构建

文档链接

Crates.io 链接

示例

use std::error::Error;
use chrono::{Utc, Duration, Weekday};
use tokio::spawn;
use tokio_schedule::{every, Job};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let weekly = every(1).week().on(Weekday::Mon).at(12, 00, 00)
        .in_timezone(&Utc).perform(|| async { println!("Every week job") });
    spawn(weekly);

    let even_weekly = every(2).weeks().on(Weekday::Mon).at(12, 00, 00)
        .in_timezone(&Utc).perform(|| async { println!("Every even week job") });
    spawn(even_weekly);

    let every_30_seconds = every(30).seconds() // by default chrono::Local timezone
        .perform(|| async { println!("Every minute at 00'th and 30'th second") });
    spawn(every_30_seconds);

    let every_30_minutes = every(30).minutes().at(20).in_timezone(&Utc)
        .perform(|| async { println!("Every 30 minutes at 20'th second") });
    spawn(every_30_minutes);

    let every_hour = every(1).hour().at(10, 30).in_timezone(&Utc)
        .perform(|| async { println!("Every hour at :10:30") });
    spawn(every_hour);

    let every_second_1_day = every(1).second().until(&(Utc::now() + Duration::days(1)))
        .in_timezone(&Utc).perform(|| async { println!("Every second until next day") });
    spawn(every_second_1_day);

    let every_day = every(1).day().at(10, 00, 00)
        .in_timezone(&Utc).perform(|| async { println!("I'm scheduled!") });
    every_day.await;

    Ok(())
}

时区

默认情况下,所有作业使用本地时区。您可以使用任何实现 chrono::Timezone 的时区。

依赖项

~3–4MB
~64K SLoC