1 个不稳定版本
0.1.0 | 2024年7月31日 |
---|
#320 在 并发
每月 127 次下载
17KB
99 行
rusty-cron-scheduler
轻量级且性能优化的库,使用 cron 格式的字符串触发函数指针。
关于
rusty-scheduler 是一个简单的库,用于接收函数指针和 cron 字符串,并负责在何时执行它们,同时提供一些可配置性以更好地适应各种情况。它是一个非常轻量级的实现,因此目前仅限于触发不带参数的简单函数,我目前正在研究和原型化添加带参数的函数的可能性。
主调度线程在启动调度器时启动的单独线程中运行。您可以在启动调度器后仍然使用 add_task 和 remove_task,因为 Mutex 负责处理任何同步问题。
另一个重要的事情是,如果任务在下次执行之前没有完成,它将跳过该执行,目前没有并行触发,这将在以后的版本中可配置。
任务执行由后台的单独线程完成,因此,您添加的每个任务在执行时都会生成一个线程,但现在最多只有一个(目前如此),这是一个需要注意的事项。
特性
目前允许使用 5 或 6 个令牌的 cron 格式字符串,具体取决于您是否需要精确到分钟或秒。它还允许在字符串中使用所有常规令牌,这些是:
- *: 定义所有可能的值
- x/y: 定义从 x 开始并每隔 y 重复的值,例如:0/5,从 0 开始每 5 分钟一次
- x-y: 从 x 开始直到 y 的值,例如:5-15,从 5 到 15 每分钟一次
- x,y,z: 定义特定的值,例如:1,5,50,在分钟 1、5 和 50
您也可以以某种方式混合使用它们,请查看 https://crontab.guru/ 以了解 cron 的功能。
您还可以配置 2 个参数
- scheduler_wait_millis: 设置调度器在检查任务并执行需要执行的内容后睡眠的毫秒数。此数字越低,调度器越精确,但将消耗更多的 CPU。
- execution_threshold_millis:该变量在任务级别和调度器级别都有定义,调度器级别是默认值,但如果任务中指定了该值,则优先使用该值。该变量用于确定一个以毫秒为单位的阈值,任务可以在精确指定的时间之前执行,例如,如果当前循环中还有50毫秒才能到达指定时间,那么它至少需要等待"scheduler_wait_millis"才能执行,这可能会根据配置导致很大的延迟,因此,如果将execution_threshold_millis设置为100ms,则任务最多可以在预期时间前100ms执行。
默认值是调度器等待时间为1000,阈值为250,但我鼓励您测试不同的配置以更好地适应您的需求。
安装
添加 rusty-scheduler 应该像 cargo add rusty-scheduler 一样简单。
使用
要启动新的调度器,请使用 Scheduler::new(),可以创建一些 SchedulerConfigOptions 或发送 None(将使用默认配置)。然后使用 add_task 将任务发送到调度器,参数包括:cron,您希望函数遵循的 cron 字符串,它接受5或6个 cron 令牌(https://crontab.guru 是一个查看 cron 令牌的好网站),function_to_exec,一个无参数的函数指针,您可以通过以下方式创建指针:"let my_ptr = MyClass::MyFunc",最后是一个可选的 execution_threshold_millis,与调度器参数相同,但仅适用于此方法。
add_task 将返回一个 Uuid,您可以使用它来调用 remove_task,这将删除调度器中的任务。
最后,在调度器上调用 startup() 来启动调度器线程,该线程将负责生成执行您的函数的线程。
启动后,您仍然可以添加或删除任务,相同的调度器线程将保持跟踪。
贡献
如果您觉得有什么缺失、可以改进或需要更改的地方,请通过工单或直接发起拉取请求告知我,我会尽快查看。
依赖项
~1.7–2.4MB
~44K SLoC