Yolo v8中的上下文管理器

2023-11-01

from contextlib import contextmanager

@contextmanager
def torch_distributed_zero_first(local_rank: int):
    # Decorator to make all processes in distributed training wait for each local_master to do something
    if local_rank not in [-1, 0]:
        dist.barrier(device_ids=[local_rank])
    yield
    if local_rank == 0:
        dist.barrier(device_ids=[0])



with torch_distributed_zero_first(rank): 
    dataset = LoadImagesAndLabels(path)

       通过上下文管理器以便使用with语句。使用 contexlib 模块中的 @contextmanager 装饰器。上下文管理器通过with语句来自动获取和释放资源,确保资源的正确管理和关闭,避免资源泄露和错误。

       上下文管理器中有__enter__()和__exit__()俩个特殊方法。__enter__()方法在with语句块执行前调用,负责获取资源并返回资源对象。__exit__()在with语句执行完调用,负责资源的释放。

创建上下文管理器有两种方法:

(1)通过函数装饰器创建,使用 contexlib 模块中的 @contextmanager 装饰器。

from contextlib import contextmanager

@contextmanager
def my_context():
    try:        
        print('Entering the context')        # 获取资源,例如打开文件、建立数据库连接等        
        yield  # yield语句之前的代码相当于__enter__()方法 
        # yield语句之后的代码相当于__exit__()方法# 使用函数装饰器创建上下文管理器

    except Exception as e:        
        print(f'An exception of type {type(e)} occurred with value {e}')  

    finally:        
        print('Exiting the context')        # 释放资源,例如关闭文件、关闭数据库连接等        
        

with my_context():    
    print('Inside the context')    # 在这里使用资源进行操作

运行结果:

        装饰器修饰my_context()函数使它成为一个上下文管理器。yield语句用于指示资源的获取及释放,允许在with语句中使用资源。

(2)通过类创建

class MyContent:
    def __enter__(self):       
        print('Entering the content')        # 获取资源,例如打开文件等       
        return self    

    def __exit__(self, exc_type, exc_val, exc_tb):        
        print('Exiting the content')        # 释放资源,例如关闭文件        
        if exc_type is not None:            
            print(f'An exception of type {exc_type} occurred with value {exc_val}')        
            return False  # 返回False表示不处理异常,异常会继续传播

# 使用自定义的上下文管理器   
with MyContent() as my_content:    
    print('Inside the content')    # 在这里使用资源对象进行操作print('Outside the context')

Mycontent()是一个自定义的上下文管理器。__enter__()方法返回self自身作为资源对象。__exit__()在with语句执行完之后被自动调用,释放资源。

上下文管理器的使用:具备上下文管理器之后,可以直接使用with语句管理资源的获取和释放。

with 上下文管理器 as 资源对象:

        对资源对象的操作

       with语句开始执行时,会先调用__enter__()方法中的内容用于获取资源,这一部分可以进行资源对象的操作。with执行完毕之后,无论是否发生异常,都会被调用用于释放资源。

class FileHandler:
    def __init__(self, filename, mode):        
        self.filename = filename        
        self.mode = mode  

    # 打开文件并返回文件对象,可以直接使用file对象进行文件的读取操作
    def __enter__(self):        
        self.file = open(self.filename, self.mode)        
        return self.file    
    
    # with执行完毕,调用__exit__()关闭文件
    def __exit__(self):        
        self.file.close()
        
# 上下文管理器
with FileHandler('file.txt', 'r') as file:     # 
    content = file.read()    
    print(content)               # __exit__()中关闭文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Yolo v8中的上下文管理器 的相关文章

  • docker 服务编排

    一 docker 服务编排 微服务的应用系统中一般包含若干个微服务 每个微服务一般都会部署多个实例 如果每个微服务都要手动启停 维护的工作量会很大 要从dockerfile build image 或者去 dockerhub 拉取image
  • Flutter 指针事件原理&点击穿透

    隔离的这14天 慢慢的研究了Flutter的指针事件 在这个过程中 又重新梳理了一下Element和Render Tree的形成过程 这篇文章 主要对指针事件在Fluter中如何下发到各个组件的过程进行梳理 指针是指针 手势是手势 手势是指

随机推荐

  • 软件工程课件

    软件工程 考点概述 软件工程概述 能力成度模型 能力成熟度模型集成 软件过程模型 逆向工程 软件需求 需求获取 数据流图 需求定义 考点概述 重点章节 软件工程概述 之前老版教程的 之前考过 能力成度模型 记忆 能力等级 和 特点 能力成熟
  • (读书笔记)python数据处理-(python读取csv、excel文件)

    文章目录 python读取csv文件 python解析excel文件 1 查看工作表中的sheet名 2 查看工作表指定sheet的内容 3 查看sheet中每个元素 4 将提取信息以字典形式展示 python 判断excel文件是否存在
  • Java使用RabbitMQ

    一 简介 rabbitMQ是什么 怎么用 怎么安装 网上文档一大把 请自行百度 本文给出的代码是rabbitMQ的fanout交换机模式 最原生的java代码 如果需要使用其他模式的rabbitMQ 请自行更改相应部分代码 二 代码 rab
  • 浅学Oracles数据库

    一 Oracle数据库中的数据类型 1 1 关于mysql数据库中的数据类型 int 整数型 bigint 长整型 float 单精度浮点型 double 双精度浮点型 char 字符型 长度不可变 varchar 字符型 长度可变 dat
  • C 函数参数传递一级指针和二级指针的区别

    文章目录 一 概念 二 函数参数为一级指针例子 1 程序一 指针类型为基本数据 2 程序二 参数为结构体 不是指针类型 3 程序三 参数类型为结构体指针 三 函数参数为二级指针例子 1 程序四 二级指针类型为基本数据类型 2 程序五 二级指
  • Element UI DatePicker 监听年月切换按钮并获取变更

    需求 在每切换一次年月时调用接口获取数据 传参为当前切换成的年月 需要监听DatePicker是否显示 用input获得焦点时触发的focus事件 element自带 并绑定4个切换按钮的click事件 html
  • Vue3 优雅地监听 localStorage 变化

    最近在研究框架 也仔细用了Vue3一些功能 今天分享一次我的实践 Vue3如何监听localStorage的变化 为什么要这样做 原生的localStorage只能监听同源地址下不同页面的localStorage变化 作为单页面应用 显然不
  • Tip of the Week #10: Splitting Strings, not Hairs

    Tip of the Week 10 Splitting Strings not Hairs Originally published as totw 10 on 2012 08 16 By Greg Miller jgm google c
  • 前端面试题及答案(字节跳动)(一)

    目录 垂直居中 左侧固定 右侧自适应 如何判断一个值是数组 bigint 最大安全整数 如何判断某个字符串以 abc 开头 进程和线程的区别 tcp 与 udp 跨域问题的几种解决方案 option 预请求 跨域的同时携带 cookie 用
  • LeetCode 处理用时最长的那个任务的员工

    解题思路 把第一个一维数组的两个元素分别定义为最大值和id 之后遍历进行判断 class Solution public int hardestWorker int n int logs int max logs 0 1 int id lo
  • sql注入知识---堆叠注入

    MySQL手注之堆叠注入详解 一 堆叠注入产生原因 二 使用条件 三 堆叠注入语句 1 查看数据库 2 查看表格 3 查看列 4 查看数据 四 16进制类型 绕过 五 堆叠应用 一 堆叠注入产生原因 平常我们注入时都是通过对原来sql语句传
  • 数组元素交叉排列的算法题(a1 a2 a3 .. an b1 b2 b3 .. bn -->a 1 b1, a2 b2, a3 b3, .. an bn ) 概论思想(perfect shuffle 算法)

    perfect shuffle 算法 今天又发现一个关于完美洗牌的算法 这个比较简单一些 由 microsoft的Peiyush Jain提出 原论文 A Simple In Place Algorithm for In Shuffle P
  • 沪胶期货全称(沪胶期货全称叫什么)

    什么是黄金期货 上海黄金交易所和上海期货交易所是一家单位吗 1 以前的期货市场上没有黄金期货 黄金期货是在08年1月9日刚刚开始的 2 上海黄金交易所和上海期货交易所不是同一个单位 上海期交所只做各种期货交易 上海金交所只做黄金现货交易 3
  • Fabric1.4源码解析:链码实例化过程

    之前说完了链码的安装过程 接下来说一下链码的实例化过程好了 再然后是链码的调用过程 其实这几个过程内容已经很相似了 都是涉及到Proposal 不过整体流程还是要说一下的 同样 切入点仍然是fabric peer main go文件中的ma
  • 前端性能优化--预加载技术

    当我们谈到前端的性能时 总是会提到比如合并 压缩 缓存或者在服务器上开启gzip之类的 目的都是为了让页面加载的更快 资源预拉取 prefetch 则是另一种性能优化的技术 通过预拉取可以告诉浏览器用户在未来可能用到哪些资源 Pre fet
  • java开发者工具IDEA自定义设置主题/字体/字号大小

    IDEA自定义设置主题 第一步 点击工具栏上的 File 选项 第二步 选择 Settings 选项 第三步 点击 Appearance Behavior gt Appearance 选项 第四步 点击右侧 Theme 下拉框 选择自己喜欢
  • docker搭建sonar服务

    拉取数据库 docker pull postgres 启动postgres数据库创建sonar用户 docker run name db p 5432 5432 e POSTGRES USER sonar e POSTGRES PASSWO
  • 神经网络二分类问题范例,神经网络解决分类问题

    求运用BP神经网络算法处理分类问题的源程序 例如输入蚊子的翼长和触角长 输出蚊子类型与此类似的源程序 30 这种分类的案例很多 附件里面就有这类案例 主要还是要形成样本 输入输出都做好 进行训练 训练完成后就能满足分类需要 模式识别是对表征
  • 什么是HuggingFace

    一 HuggingFace简介 1 HuggingFace是什么 可以理解为对于AI开发者的GitHub 提供了模型 数据集 文本 图像 音频 视频 类库 比如transformers peft accelerate 教程等 2 为什么需要
  • Yolo v8中的上下文管理器

    from contextlib import contextmanager contextmanager def torch distributed zero first local rank int Decorator to make a