python - 根据 cron spec 计算下一个预定时间

标签 python algorithm cron scheduler

在给定当前时间和 cron 规范的情况下,计算事件下一次运行时间的有效方法是什么?

除了“每分钟循环检查它是否符合规范”之外,我正在寻找其他东西。

规范示例可能是:

  • 每月1号和15号15:01
  • 在每小时的 10、20、30、40、50 分钟

Python 代码会很不错,但伪代码或高级描述也很受欢迎。

[更新] 假设规范已经被解析并且采用了某种合理的格式。

最佳答案

只是看看它,我认为你需要:

  • 将 chron 规范解析为包含每个字段可接受值的五个数组;
  • 将“现在”解析为每个字段的值;
  • 按分钟、小时、{day-of-month OR day-of-week}、month-of-year 的顺序:找到匹配或超过当前值的最低数组值,并进行进位校正。

我不知道如何同时处理星期几和星期几;我确信有办法,但另一方面,我认为我从未见过实际指定两者的规范。我认为为其中任何一个编写一个处理程序就足够了,如果您同时收到这两个则抛出错误。

编辑:显然,如果同时指定了星期几和星期几,它应该在两者 上触发 - 即如果规则是 ' 15号,星期三'每15号每周三触发。

croniter 包做你想做的事:

import croniter
import datetime

now = datetime.datetime.now()
sched = '1 15 1,15 * *'    # at 3:01pm on the 1st and 15th of every month
cron = croniter.croniter(sched, now)

for i in range(4):
    nextdate = cron.get_next(datetime.datetime)
    print nextdate

打印

2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00

不过如果它被写成一个实际的迭代器就好了。也许我有我的下一个项目 ;-)

关于python - 根据 cron spec 计算下一个预定时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4610904/

相关文章:

algorithm - 在这些数字中寻找规律

c++ - 以下代码的时间复杂度..?

python - Rabin-Miller Strong Pseudoprime Test Implementation 将不起作用

Linux CentOs 重启服务

python - Python 中的 Crontab 创建 cron 作业,但不运行脚本

php - Zend Framework 2 定时任务

python - 如何让 CGIHTTPServer 询问用户/密码

python - 在scrapy中修改CSV导出

Python/Django 日期时间比较

python - 如何在不使用 setup.py 文件的情况下构建源代码分发?