当前位置: 首页 > news >正文

专做中医教学网站微网站一键导航

专做中医教学网站,微网站一键导航,有什么网站做统计图的,建网站和软件需要什么在 Python 中,上下文管理器(Context Manager) 是一种用于管理资源获取与释放的结构,核心作用是自动化资源的进入和退出(常用于文件操作、数据库连接、线程锁、事务处理等)。它的本质是定义好 enter / exit&…

在 Python 中,上下文管理器(Context Manager) 是一种用于管理资源获取与释放的结构,核心作用是自动化资源的进入和退出(常用于文件操作、数据库连接、线程锁、事务处理等)。它的本质是定义好 enter / exit(同步)或 aenter / aexit(异步) 方法。

1. 基本概念

同步上下文管理器(with)

class MyResource:def __enter__(self):print("获取资源")return selfdef __exit__(self, exc_type, exc_val, exc_tb):print("释放资源")with MyResource() as r:print("处理中")

输出:

获取资源
处理中
释放资源

异步上下文管理器(async with)

适用于异步资源(如:异步数据库、aiofiles、aiohttp 等):

class MyAsyncResource:async def __aenter__(self):print("异步获取资源")return selfasync def __aexit__(self, exc_type, exc_val, exc_tb):print("异步释放资源")async with MyAsyncResource() as r:print("异步处理中")

2. contextlib 模块

contextlib 是 Python 标准库中的一个实用工具模块,专门用于简化上下文管理器(context manager)的创建和使用。

主要功能

  1. 简化上下文管理器的创建 - 无需编写完整的类实现 enterexit 方法
  2. 提供装饰器和工具函数 - 用于常见上下文管理场景
  3. 支持可重用的上下文管理器

核心组件

1. @contextmanager 装饰器

基本用法:

from contextlib import contextmanager@contextmanager
def 管理资源(*args, **kwargs):# 这部分相当于 __enter__ 方法资源 = 获取资源(*args, **kwargs)try:yield 资源  # 在这里返回资源给as变量finally:# 这部分相当于 __exit__ 方法释放资源(资源)# 使用方式
with 管理资源() as 资源:print(资源)

示例:

from contextlib import contextmanager@contextmanager
def open_file(path):f = open(path, 'r')try:yield ffinally:f.close()with open_file("test.txt") as f:print(f.read())

2. @asynccontextmanager(异步)

基本用法:

from contextlib import asynccontextmanager@asynccontextmanager
async def async_resource_manager():# 初始化部分 (相当于 __aenter__)resource = await acquire_resource_async()try:yield resource  # 在这里暂停,将资源提供给 with 块finally:# 清理部分 (相当于 __aexit__)await release_resource_async(resource)# 使用方式
async def main():async with async_resource_manager() as res:await do_something_with(res)

特点:

  • 专为异步代码设计:与普通 @contextmanager 不同,它处理的是异步上下文协议 (aenter/aexit)
  • 必须用 async with 调用:不能与普通 with 语句混用
  • 支持异步清理:finally 块中可以执行 await 操作

示例:

from contextlib import asynccontextmanager
import aiofiles@asynccontextmanager
async def open_file_async(path):f = await aiofiles.open(path, 'r')try:yield ffinally:await f.close()async def run():async with open_file_async("test.txt") as f:content = await f.read()

3. 高级实践:FastAPI 启动生命周期封装

from fastapi import FastAPI
from contextlib import asynccontextmanager
from motor.motor_asyncio import AsyncIOMotorClient@asynccontextmanager
async def lifespan(app: FastAPI):app.state.mongo = AsyncIOMotorClient("mongodb://localhost:27017")["mydb"]yieldapp.state.mongo.client.close()app = FastAPI(lifespan=lifespan)
http://www.dtcms.com/a/397288.html

相关文章:

  • 网站建设方案的企业如何做Google外贸网站
  • 做个商城网站要多少钱企业工商公示信息查询系统
  • 贵阳 网站建设做直播信号网站
  • node.js 网站开发 公司 广州域名如何指向网站
  • 的网站开发工具有哪些dede 门户网站
  • 深圳网站设计g服务类网站建设服务公司
  • 如何制作自己的网站的邮箱南山做网站多少钱
  • wordpress网站属于什么网站吗WordPress不能新建页面
  • 青岛专业公司网站设计网站底部导航设置
  • 龙游住房和城乡建设局网站手机软件开发外包
  • 企业网站的建设目的有什么disqus wordpress
  • 北京 好的网站制作做网站用jquery
  • 建设厅执业资格注册中心网站个人网站建设规划论文
  • 源码建站教程免费网站统计代码
  • 沧州做网站的公司杭州seo推广公司
  • 建立企业网站的步骤网站制作开发教程
  • 扶风网站开发国外客户的网站电话
  • 怎样登录韵网网站阿里云网站部署
  • 织梦做招聘网站网店运营招聘要求
  • 携程做旅游的网站wordpress用户中心插件破解
  • 天津网站优化公司本周新闻热点10条2021
  • 精品网站建设费用 找磐石网络一流网站点击弹出下载框 怎么做
  • 网站建设的英语怎么说医院网站制作好吗
  • 免费网上商城网站建设开发公司年度工作总结
  • 个人网站的设计与实现广告业网站开发
  • 网站维护中 源码wordpress 博客 很慢
  • 网站安全查询系统深圳软件外包公司都有哪些
  • 石排镇网站建设手表商城
  • 台州网站搜索排名深圳团购网站设计多少钱
  • 北京网站建设是什么意思公关公司如何处理危机