美文网首页Python全栈工程师
20.6-上下文管理器Context Manager

20.6-上下文管理器Context Manager

作者: BeautifulSoulpy | 来源:发表于2019-10-06 09:30 被阅读0次

只要一个人还有追求,他就没有老。直到后悔取代了梦想,一个人才算老!


上下文管理跟操作系统相关,后面慢慢加深理解;文件描述符资源是有上限的(默认1024);

很多情况,当我们使用完一个资源后,我们需要手动的关闭掉它,比如操作文件,建立数据库连接等。但是,在使用资源的过程中,如果遇到异常,很可能错误被直接抛出,导致来不及关闭资源。所以在大部分程序语言里,我们使用”try-finally”语句来确保资源会关闭。比如下面的Python写文件代码:

try:
    f = open('test.txt', 'a+')
    f.write('Foo\n')
    print('!!!!!')
finally:
    f.close()
    print('_____')

当”try-finally”中间的逻辑复杂,而且还带有各种嵌套的话,代码就很不容易维护。Python的with语句,可以说功能同上面的”try-finally”几乎一样,但代码看上去简洁的多,我们来实现同样的功能:

with open('test.txt', 'a+') as f:
    f.write('Foo\n')

f8 = open('test.txt','r+')
with f8:
    f8.write('ssss')
    print('~~~~~~~~~~~~')

在with语句块退出时,”f.close()”方法会自动被调用,即使”f.write()”出现异常,也能确保close()方法被调用。

上下文管理——交给解析器去释放文件对象

  1. 使用with ... as f :关键字 , f 不是上下文管理器,应该是文件资源对象(默认上限1024);
  2. 上下文管理的语句块并不会开启新的作用域;是一种特殊语法
  3. with语句块执行完的时候,会自动关闭文件对象(程序退出都不能阻止)

上下文管理包括:
自定义类来使用上下文管理器
异常处理
contextlib模块
closing()方法
contextmanager装饰器

对于类似于文件对象的IO对象,一般来说都需要在不使用的时候关闭、注销,以释放资源。
IO被打开的时候,会获得一个文件描述符。计算机资源是有限的,所以操作系统都会做限制。就是为了保护计算机
的资源不要被完全耗尽,计算资源是共享的,不是独占的。
一般情况下,除非特别明确的知道资源情况,否则不要提高资源的限制值来解决问题。

相关文章

  • 20.6-上下文管理器Context Manager

    只要一个人还有追求,他就没有老。直到后悔取代了梦想,一个人才算老! 上下文管理跟操作系统相关,后面慢慢加深理解;文...

  • Python上下文管理器

    Context Manager 文档翻译 Python with语句支持上下文管理器定义的运行时上下文概念(run...

  • 上下文管理器(Context Manager)

    上下文管理器(Context Manager) 上下文管理器是指在执行一段代码执行前,先执行一段代码用于一些预处理...

  • context manager

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。...

  • Python中的上下文管理器

    contextlib — Context Manager Utilities contextlib - 上下文管理...

  • python上下文管理器(context manager)

    首先,什么是上下文管理器?上下文管理器就是实现了上下文管理协议的对象。主要用于保存和恢复各种全局状态,关闭文件等,...

  • 2021-02-08

    1.上下文管理协议与上下文管理器的基础概念 上下文管理协议(Context Management Protocol...

  • python上下文管理

    什么是上下文管理 上下文:context的直译, 指的是代码执行过程中的前后状态上下文管理器:python上下文管...

  • 2018-08-08

    React 高级指南 React 新版上下文(context) context ?答:上下文(Context) 提...

  • Linux中的Context与同步

    Linux中的Context (上下文) 基于ARM64 Context 上下文: 上下文的概念:https://...

网友评论

    本文标题:20.6-上下文管理器Context Manager

    本文链接:https://www.haomeiwen.com/subject/nequpctx.html