配置启动和关闭事件的推荐方法是使用FastAPI()应用的lifespan参数,如前所示。如果你提供了一个lifespan参数,启动(startup)和关闭(shutdown)事件处理器将不再生效。要么使用lifespan,要么配置所有事件,两者不能共用。 你可以跳过这一部分。 有一种替代方法可以定义在启动和关闭期间执行的逻辑。
app=FastAPI()@app.on_event("startup")defstartup_event():print("startup")@app.on_event("shutdown")defshutdown_event():print("shutdown") 其实很简单,我们注入这两个事件即可完成。在结束的时候,我们如果用IO的操作那么必须走同步的方式,不能用异步的方式。 那么这些我们在实际的工作中如何使用呢,举...
使用app.on_event(“startup”) 装饰器注册服务启动事件,可以注册多个服务启动事件 服务启动后,等所有被注册的 startup事件都执行完成后,才开始接收请求 应用场景:初始化db,初始化外部API连接等等 from fastapi import FastAPI app = FastAPI() items = {} @app.on_event("startup") async def startup_event(...
app = FastAPI() # 启动事件 @app.on_event("startup") async def initialize(request: Request): request.state.engine = await db.set_bind("mysql+mysqldb://root:123456@localhost/foo") # 关闭事件 @app.on_event("shutdown") async def destory(request: Request): await request.state.engine....
app = FastAPI() @app.on_event("startup") def startup_event(): threading.Thread(target=do_work, daemon=True).start() def do_work(): while True: # do background work 3、使用第三方后台任务库 可以使用第三方库如apscheduler来定期执行后台任务。
app = FastAPI()@app.on_event("startup")def startup_event():print("startup")@app.on_event("shutdown")def shutdown_event():print("shutdown") 其实很简单,我们注入这两个事件即可完成。在结束的时候,我们如果用IO的操作那么必须走同步的方式,不能用异步的方式。
app =FastAPI() @app.on_event("startup")defstartup_event():print("startup") @app.on_event("shutdown")defshutdown_event():print("shutdown") 其实很简单,我们注入这两个事件即可完成。在结束的时候,我们如果用IO的操作那么必须走同步的方式,不能用异步的方式。
app = FastAPI() @app.on_event("startup") async def app_start(): scheduler.add_job(execute_periodic_function, 'interval', seconds=3) scheduler.start() 1. 2. 3. 4. 5. 6. 7. 8. 2. 使用 Celery Celery 是一个高效的分布式任务队列系统,可与 FastAPI 无缝集成。
app = FastAPI() @app.on_event("startup") async def app_start(): scheduler.add_job(execute_periodic_function, 'interval', seconds=3) scheduler.start() 2. 使用 Celery Celery 是一个高效的分布式任务队列系统,可与 FastAPI 无缝集成。
3.在 FastAPI 中导入 celery app 并设置定时任务: fromcelery.schedulesimportcrontab@app.on_event("startup")asyncdefstartup(): celery_app.conf.beat_schedule = {'beat-task-every-30-seconds': {'task':'celery_task','schedule':30.0, }, ...