6 个版本
0.1.7 | 2021 年 7 月 2 日 |
---|---|
0.1.6 | 2021 年 3 月 4 日 |
0.1.3 | 2021 年 2 月 24 日 |
在 日期和时间 中排名第 228
每月下载 65 次
用于 gtickcheckerrust
46KB
698 行
_______ ___
___ ________ ____ __/_ __(_)_ _ ___ ____/ _ \
/ _ `/ __/ _ `/ _ \/ -_) / / / ' \/ -_) __/ , _/
\_, /_/ \_,_/ .__/\__/_/ /_/_/_/_/\__/_/ /_/|_|
/___/ /_/ grapeTimerR
简介 Intro
粗粒度的时间调度器可以通过一系列操作快速简单地创建时间任务。
一款粗粒度的时间调度器,可以帮你通过一些字符串快速并简单地创建时间任务。
grapeTimer 的 Rust 版本,提供相同功能以及相同类型的服务。
功能 Feature
- 纯异步代码执行(Pure async code)
- 通过命令格式创建
std::chrono::Datetime
(通过日期格式创建) - 简洁的 Api 格式,轻量且可拆分的函数库(Simple Api, light and detachable library)
- 快速创建调度器(Quickly create a scheduler)
- 可控的调度器时间粒度
[需要提前指定]
(Controllable scheduler time granularity[Need to specify in advance]
) - 多线程调度模式(Multi-thread scheduling mode)
- 时间周期,次数多模式可控
[支持每天、每周、每月]
(Time period, multi-mode controllable number of times[support daily, weekly, monthly]
) - 可以获取下一次执行时间
[Chrono Datetime]
(Can get the string of the next execution time) - 自定义起始 TimerId 的种子(Customize the seed of the starting TimerId)
- 自定义 TimerId 的生成函数
[自生成 ID 请注意并发场景下的线程争抢]
(Custom TimerId generation trait[Self-generated ID, please pay attention to thread contention in concurrent scenarios]
) - TimerId 扩展为 i64,支持大 ID 和 timestampId 生成器(TimerId is i64, supporting large Id and timestampId generator correspondence)
日期格式 Date Format
调度器有一个轻量级的日期模式分析系统,可以提供每日、每周、每月的时间日期生成方法
调度器有轻度的日期模式分析体系,可提供每日,每周,每月的时间日期生成方式,具体格式如下:
关键字 Key | 格式 Format | 说明 Description |
---|---|---|
Day | Day 00:00:00 | 生成每日的日期时间 |
Week | Week 1 00:00:00 | 生成每周的日期时间, 0~6 分别代表周日到周六 |
Month | Month 1 00:00:00 | 生成每月该日期的时间,建议不要使用 28 日之后的日期 |
Key | Format | Description |
---|---|---|
Day | Day 00:00:00 | 生成每日日期和时间 |
Week | Week 1 00:00:00 | 生成每周日期和时间, 0~6 代表周日到周六 |
Month | Month 1 00:00:00 | 生成月份日期时的时间,建议不要使用28日之后的日期 |
示例
解析日期格式
use grapeTimerR::parsers;
// get next tick Datetime
let next_day = parsers::parser_next("Day 05::00:00").unwrap();
// get next timestamp
let next_dayTime = parsers::parser_timestamp("Day 05::00:00").unwrap();
// utc
let next_dayUtc = parsers::parser_nextUtc("Day 05::00:00").unwrap();
let next_dayTimeUtc = parsers::parser_timestampUtc("Day 05::00:00").unwrap();
初始化系统
use grapeTimerR::{timer::Config,IDMode, timer};
let conf = Config{
// output log info
debug: true,
debug_log:String::from("logs/grapeTimer.log"),
thread_count: 10,
// 初始化全局ID的起始ID,可以自行控制
// Initialize the starting ID of the global ID, which can be controlled by yourself
id_seed: 1,
id_type: IDMode::SequenceId
};
timer::init_schedule(conf);
添加报价器
fn executor_task(id:u64) {
println!("on function mode:{}",chrono::Local::now().to_rfc2822());
}
// 使用函数方式执行代码 Use function to execute code
timer::spawn_ticker(time::Duration::from_millis(5000),2,executor_task);
// 使用闭包模式 Use closure function
timer::spawn_ticker(time::Duration::from_millis(5000),2,|x| {
println!("on ticker:{}",chrono::Local::now().to_rfc2822());
});
** 使用定时器运行时
通过特质模式添加报价器
struct ExempleAction {}
// 首先我们定义一个结构体
//First we define a struct
impl TaskAction for ExempleAction {
// 实际执行的代码段
// Code snippet executed
fn execute(&self, id: u64) {
println!("on trait struct:{}",chrono::Local::now().to_rfc2822());
}
// 不使用的话,返回一个空字符串
// If not used, return an empty string,like ""
fn date_format(&self) -> &str {
return ""
}
// 如果你不使用date_format,就必须使用这个参数,否则异常。
// If you don't use date_format, you must use this parameter, otherwise it is panic.
// 时间单位 毫秒 ,time unit is millisecond
fn tick(&self) -> u64 {
return 5000;
}
// 这里需要自定义ID或将其设置为一个组的ID,所以停止任务会停止这个组
// Here you need to customize the ID or set it to the GroupId or TaskType Id,
// so stopping the task will stop the group
fn id(&self) -> u64 {
return 18888;
}
// 循环的次数
fn loop_count(&self) -> i32 {
return 15;
}
}
// 使用trait任务,可以简化部分实际逻辑
// Using trait tasks can simplify part of the actual logic
timer::spawn_trait(Arc::new(ExempleAction{}));
添加日期
timer::spawn_date("day 19:21:50",1,|id| {
println!("on date:{}",chrono::Local::now().to_rfc2822());
});
鸣谢(Thanks)
使用Jetbrains Ide进行项目开发
依赖关系
~6–8MB
~143K SLoC