FastAPI(55)- Events: startup - shutdown 启动/关闭事件

简介: FastAPI(55)- Events: startup - shutdown 启动/关闭事件

背景


  • 可以定义需要在应用程序启动之前或应用程序关闭时执行的事件处理程序(函数)
  • 这些函数可以用 async def 或普通 def
  • 注意:只会执行主应用程序的事件处理程序,而不会执行子应用程序

 

实际代码


#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: 小菠萝测试笔记
# blog:  https://www.cnblogs.com/poloyy/
# time: 2021/10/4 7:26 下午
# file: 45_event.py
"""
import uvicorn
from fastapi import FastAPI
app = FastAPI()
items = {}
# 添加在应用程序启动之前运行的函数
@app.on_event("startup")
async def startup_event():
    print("启动应用程序啦")
    items["foo"] = {"name": "Fighters"}
    items["bar"] = {"name": "Tenders"}
# 添加在应用程序关闭时运行的函数
@app.on_event("shutdown")
async def shutdown_event():
    print("关闭应用程序啦")
    with open("log.txt", mode="a") as log:
        log.write("Application shutdown")
@app.get("/items/{item_id}")
def read_items(item_id: str):
    return items[item_id]
if __name__ == '__main__':
    uvicorn.run(app="45_event:app", reload=True, host="127.0.0.1", port=8080)


startup

  • 模拟初始化数据库,设置一些值到 items 中
  • 可以拥有多个事件处理函数

 

启动应用程序和关闭应用程序

image.png

请求结果

image.png


相关文章
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
RAG分块策略:主流方法(递归、jina-seg)+前沿推荐(Meta-chunking、Late chunking、SLM-SFT)
RAG分块策略:主流方法(递归、jina-seg)+前沿推荐(Meta-chunking、Late chunking、SLM-SFT)
827 11
RAG分块策略:主流方法(递归、jina-seg)+前沿推荐(Meta-chunking、Late chunking、SLM-SFT)
差异基因分析:fold change(差异倍数), P-value(差异的显著性)
差异基因分析:fold change(差异倍数), P-value(差异的显著性)
4025 0
差异基因分析:fold change(差异倍数), P-value(差异的显著性)
|
5月前
|
存储 人工智能 前端开发
无头 CMS 深度剖析:架构、优势与未来发展趋势
无头 CMS,即 Headless Content Management System,是一种将内容的管理与展示分离的内容管理系统。与传统 CMS 不同,它没有内置的前端展示层,仅专注于内容的创建、编辑、存储与管理。
370 6
无头 CMS 深度剖析:架构、优势与未来发展趋势
|
6月前
|
前端开发 JavaScript API
Webview+Python:用HTML打造跨平台桌面应用的创新方案
本文系统介绍了使用PyWebView库结合HTML/CSS/JavaScript开发跨平台桌面应用的方法。相比传统方案(如PyQt、Tkinter),PyWebView具备开发效率高、界面美观、资源占用低等优势。文章从技术原理、环境搭建、核心功能实现到性能优化与实战案例全面展开,涵盖窗口管理、双向通信、系统集成等功能,并通过“智能文件管理器”案例展示实际应用。适合希望快速构建跨平台桌面应用的Python开发者参考学习。
602 1
|
12月前
|
消息中间件 存储 Java
Kafka 如何避免重复消费?
在Apache Kafka中,避免消息的重复消费是确保数据准确处理的关键。本文详细介绍了七种避免重复消费的方法:使用消费者组、幂等生产者、事务性生产者与消费者、手动提交偏移量、外部存储管理偏移量、去重逻辑及幂等消息处理逻辑。每种方法均有其优缺点,可根据实际需求选择合适方案。结合消费者组、手动提交偏移量和幂等处理逻辑通常是有效策略,而对于高一致性要求,则可考虑使用事务性消息。
1745 0
|
算法 数据可视化 Java
JAVA规则引擎工具有哪些?
本文对比分析了六种Java规则引擎:Drools、IBM ODM (JRules)、Easy Rules、JBPM、OpenL Tablets以及Apache Camel结合规则组件的应用。Drools是一款功能全面的业务规则管理系统,支持DRL文件定义规则、高效的规则匹配算法、复杂的规则流及决策表,并易于与Java应用集成。IBM ODM (原JRules)提供了强大的规则管理功能,包括Web界面和Eclipse插件定义管理规则、直观的决策表和决策树、REST和Java API集成选项及优化的性能。
1997 3
|
存储 JavaScript Java
基于 WebSocket 打造聊天室
基于 WebSocket 打造聊天室
|
测试技术 持续交付 项目管理
hatch,现代化的 Python 项目管理和打包工具!
hatch,现代化的 Python 项目管理和打包工具!
334 2
|
JavaScript 前端开发 网络架构
Vue-router的动态路由:获取传递的值
Vue-router的动态路由:获取传递的值