#自动化 #实用工具 #任务调度 #实用工具 #后台任务

rusty-cron-scheduler

简单的调度器,根据 cron 字符串执行函数指针

1 个不稳定版本

0.1.0 2024年7月31日

#320并发

Download history 127/week @ 2024-07-29

每月 127 次下载

GPL-3.0-only

17KB
99

rusty-cron-scheduler

轻量级且性能优化的库,使用 cron 格式的字符串触发函数指针。

  1. 关于
  2. 特性
  3. 安装
  4. 使用
  5. 贡献

关于

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