重要使用库的版本
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"}