重要使用库的版本
1 2 3 | 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定时器
1 2 3 4 5 6 7 8 9 10 11 12 | @app.on_event('startup') def init_scheduler(): """初始化""" jobstores = {<!-- --> 'default': SQLAlchemyJobStore(url='mysql+pymysql://root:Aa111***##@43.239.120.21: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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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!"} |
删除任务接口
1 2 3 4 5 6 7 8 9 10 | @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"} |