定时任务
APScheduler (Advanced Python Scheduler) 是一个 Python 第三方库,其强大的定时任务功能被广泛应用于各个场景。在 NoneBot 中,定时任务作为一个额外功能,依赖于基于 APScheduler 开发的 nonebot-plugin-apscheduler
插件进行支持。
安装插件
在使用前请先安装 nonebot-plugin-apscheduler
插件至项目环境中,可参考获取商店插件来了解并选择安装插件的方式。如:
在项目目录下执行以下命令:
nb plugin install nonebot-plugin-apscheduler
使用插件
nonebot-plugin-apscheduler
本质上是对 APScheduler 进行了封装以适用于 NoneBot 开发,因此其使用方式与 APScheduler 本身并无显著区别。在此我们会简要介绍其调用方法,更多的使用方面的功能请参考APScheduler 官方文档。
导入调度器
由于 nonebot_plugin_apscheduler
作为插件,因此需要在使用前对其进行加载并导入其中的 scheduler
调度器来创建定时任务。使用 require
方法可轻松完成这一过程,可参考 跨插件访问 一节进行了解。
from nonebot import require
require("nonebot_plugin_apscheduler")
from nonebot_plugin_apscheduler import scheduler
添加定时任务
在 APScheduler 官方文档 中提供了以下两种直接添加任务的方式:
from nonebot import require
require("nonebot_plugin_apscheduler")
from nonebot_plugin_apscheduler import scheduler
# 基于装饰器的方式
@scheduler.scheduled_job("cron", hour="*/2", id="job_0", args=[1], kwargs={arg2: 2})
async def run_every_2_hour(arg1: int, arg2: int):
pass
# 基于 add_job 方法的方式
def run_every_day(arg1: int, arg2: int):
pass
scheduler.add_job(
run_every_day, "interval", days=1, id="job_1", args=[1], kwargs={arg2: 2}
)
注意
关于 APScheduler 的更多使用方法,可以参考 APScheduler 官方文档 进行了解。
配置项
apscheduler_autostart
- 类型:
bool
- 默认值:
True
是否自动启动 scheduler
,若不启动需要自行调用 scheduler.start()
。
apscheduler_log_level
- 类型:
int
- 默认值:
30
apscheduler 输出的日志等级
WARNING
=30
(默认)INFO
=20
DEBUG
=10
(只有在开启 nonebot 的 debug 模式才会显示 debug 日志)
apscheduler_config
- 类型:
dict
- 默认值:
{ "apscheduler.timezone": "Asia/Shanghai" }
apscheduler
的相关配置。参考配置调度器, 配置参数
配置需要包含 apscheduler.
作为前缀,例如 apscheduler.timezone
。