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')

参考资料

https://apscheduler.readthedocs.io/en/3.x/userguide.html

posted on   荣锋亮  阅读(19)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示