计划任务
# 准备工作
工欲善其事,必先利其器
from app.util.graia import GraiaScheduler
from app.core.app import AppCore
core: AppCore = AppCore() # 获取 Madoka 实例
sche: GraiaScheduler = core.get_scheduler() # 获取 GraiaScheduler 实例
# 注册计划任务
通过 GraiaScheduler 我们可以注册一个计划任务
······
from app.util.graia import GraiaScheduler, timers
······
@sche.schedule(timers.every_second())
async def tasks():
print('每秒执行一次')
# timers 模块
通过 timers 模块,可以便捷的生成一些计时器
timers.every_second
: 每秒执行一次。timers.every_custom_seconds
: 每 n 秒执行一次timers.every_minute
: 每分钟执行一次timers.every_custom_minutes
: 每 n 分钟执行一次timers.every_hours
: 每小时执行一次timers.every_custom_hours
: 每 n 小时执行一次
这些便捷的 timers 可以在其 文档字符串 中获得
当然,这些简易的计时器都是以机器人启动时开始计时。
难道我们要掐着点启动机器人?
# 特殊的 timers
timers.crontabify
支持传入一个 crontab
时间格式来进行时间计算,相关语法可以看 菜鸟教程对 crontab 的讲解 (opens new window)
值得注意的是,Linux crontab
使用 5 位数字,但 timers.crontabify
所使用的 crontab
语法分析库支持将秒做为第六位参数传入。
# 每天7点15分30秒执行
@sche.schedule(timers.crontabify('15 7 * * * 30'))
注意
不要把 crontab
的第六位参数写成 *
,这将会导致每秒都执行一次。除非你知道你在做什么。
上次更新: 2022/11/22, 00:08:13