fastapi apscheduler 通过函数引用添加job
主要是一个简单测试,同时集成fastapi,包含了简单参数传递
参考代码
import logging
import uuid
from fastapi import FastAPI
from pytz import utc
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
logging.basicConfig()
logging.getLogger('apscheduler').setLevel(logging.DEBUG)
app = FastAPI()
jobstores = {
'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
executors = {
'default': ThreadPoolExecutor(20),
'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
'coalesce': False,
'max_instances': 3
}
scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)
scheduler.add_listener(lambda event: print(event))
@app.on_event("startup")
async def startup_event():
scheduler.start()
@app.on_event("shutdown")
async def shutdown_event():
scheduler.shutdown()
@app.get("/")
async def add_task():
# 通过kwargs 传递参数,注意引用格式应该是<module_name>:<function_name>, 同时应该把任务模块独立出来
scheduler.add_job("mytask:my_job",name=str(uuid.uuid4()),id=str(uuid.uuid4()),kwargs={"name":"dalong","age":333},trigger='interval', seconds=5)
@app.get("/pause/{job_id}")
async def pause_job(job_id: str):
scheduler.pause_job(job_id)
@app.get("/jobs")
async def jobs():
return [ {"id":item.id,"name":item.name} for item in scheduler.get_jobs()]
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
- mytask.py
def my_job(**kwargs):
print(kwargs)
print('Hello World')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-10-09 openmetadata pipelineservice client 处理机制
2022-10-09 openmetadata 元数据处理标准
2021-10-09 cloud-git 扩展s3 存储支持说明
2020-10-09 airline开发类似git cli 的jar 包
2020-10-09 开发自己的jdbc驱动——基本说明
2019-10-09 rushjs来自微软的单体仓库管理工具
2018-10-09 12 Factor CLI Apps