fastApI 定时任务apscheduler

重要使用库的版本

APScheduler         3.6.3
fastapi             0.61.1
websockets          8.1

apscheduler 的使用

APSScheduler是python的一个定时任务框架,它提供了基于日期date、固定时间间隔interval、以及linux上的crontab类型的定时任务。该框架不仅可以添加、删除定时任务,还可以将任务存储到数据库中、实现任务的持久化。
apscheduler详细的使用说明查看
在这里插入图片描述

此实例的使用场景

其他服务调用FastAPI 中的add_job添加任务接口;
其他服务调用FastAPI 中的remove_job删除任务接口;
在任务到点后,使用websockets 进行消息通知;

在项目启动时开始scheduler定时器

@app.on_event('startup')
def init_scheduler():
    """初始化"""
    jobstores = {
        'default': SQLAlchemyJobStore(url='mysql+pymysql://root:password@IP:3306/teacher?charset=utf8')  # SQLAlchemyJobStore指定存储链接
    }
    global scheduler
    # scheduler = BackgroundScheduler()
    scheduler = AsyncIOScheduler()
    scheduler.configure(jobstores=jobstores)

    scheduler.start()

添加任务接口
await manager.broadcast(json.dumps(s[‘msg’]), s[‘rec’]) # 查看另一篇博客 FastAPI WebSocket

async def print_time(s):
    print(s,'ssssss')
    global manager
    await manager.broadcast(json.dumps(s['msg']), s['rec'])  # 查看另一篇博客 
    return 'ok'

class JobItem(BaseModel):
    job_id: str
    cron: str
    data: dict
    
@app.post('/add_job/')
async def add_job(item: JobItem):
    print(item, 'xxx')
    job_id = item.job_id
    data = item.data
    cron = datetime.datetime.strptime(item.cron, '%Y-%m-%d %H:%M:%S')

    """添加job"""
    global scheduler
    scheduler.add_job(print_time, 'date', next_run_time=cron, args=[data, ], id=job_id)
    return {"msg": "success!"}

删除任务接口

@app.post('/remove_job/')
async def remove_job(item: JobItem):
    """移除job"""
    print(item.job_id, 'hahaha')
    try:
        global scheduler
        scheduler.remove_job(item.job_id)
        return {"msg": "success!"}
    except:
        return {"msg": "s"}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值