Sanic 结合APScheduler做定时任务处理

本文介绍如何在Sanic框架中使用APScheduler实现定时任务。包括每十分钟执行一次的任务及每天特定时间点的任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间有个晓需求需用到定时任务,由于在同服务器上部署的是Sanic服务,因此就想在sanic框架上使用定时任务。

根据sanic官方给出的文档:

# 定时任务函数
async def taskFunc(app):

    while True:
        await asyncio.sleep(3)
		# 执行SQL语句
        sql_str = "SELECT * FROM Students"
        res = await sanicdb.query(sql_str )
		# 处理返回结果
        print(res)

# 启动
app.add_task(taskFunc(app))

使用根据实际测试,使用

await asyncio.sleep(3)

代码可以实现每隔XX时间开展XXX任务,但是对于每天X点做什么任务这种不适用。

在python下常规使用APScheduler定时框架,做定时任务,因此尝试把sanic和APScheduler结合使用。经过实践测试,通过以下代码可以实现两者结合的定时任务:

# 定时任务函数 ,此处可以是async。也可以不是异步函数
async def theTaskFun():
     logger.info(f'测试新增每日定时任务!')
     # 具体函数功能

# -------------------------------------------------
from apscheduler.schedulers.blocking import BlockingScheduler

async def taskJob(app):
     while True:
         sched = BlockingScheduler()
         # 每十分钟执行一次任务
         sched.add_job(theTaskFun, 'interval', minutes=10, id='my_job', jitter=120)

         # 在每天7点,每隔 5分钟 运行一次 job 方法
         sched.add_job(theTaskFun, 'cron', hour=7, minute='*/5')

         sched.add_job(theTaskFun, 'cron', hour=18, minute='05')

         # 在每天16和17点的10分,运行一次 job 方法
         # sched.add_job(theTaskFun, 'cron', hour='16-17', minute='10')
         # 此处的功能函数可以是完全不同的几个函数,另外也可以在其他.py文件中引入可执行函数

         await sched.start()

app.add_task(taskJob(app))

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值