返回顶部
首页 > 资讯 > 后端开发 > Python >Python异步之上下文管理器怎么使用
  • 209
分享到

Python异步之上下文管理器怎么使用

2023-07-05 15:07:55 209人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“python异步之上下文管理器怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python异步之上下文管理器怎么使用”吧!正文上下文管理器是一种 Python 构造,它提

本篇内容主要讲解“python异步之上下文管理器怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Python异步之上下文管理器怎么使用”吧!

    正文

    上下文管理器是一种 Python 构造,它提供了一个类似 try-finally 的环境,具有一致的接口和方便的语法,例如通过“with”表达。

    它通常与资源一起使用,确保在我们完成资源后始终关闭或释放资源,无论资源的使用是成功还是因异常而失败。

    Asyncio 允许我们开发异步上下文管理器。

    我们可以通过定义一个将 aenter() 和 aexit() 方法实现为协程的对象来在 asyncio 程序中创建和使用异步上下文管理器。

    1. 什么是异步上下文管理器

    异步上下文管理器是一个实现了 aenter() 和 aexit() 方法的 Python 对象。

    在我们深入了解异步上下文管理器的细节之前,让我们回顾一下经典的上下文管理器。

    1.1. Context Manager

    上下文管理器是一个 Python 对象,它实现了 enter() 和 exit() 方法。

    • enter() 方法定义了块开头发生的事情,例如打开或准备资源,如文件、套接字或线程池

    • exit() 方法定义退出块时发生的情况,例如关闭准备好的资源。

    通过“with”表达式使用上下文管理器。通常,上下文管理器对象是在“with”表达式的开头创建的,并且会自动调用 enter() 方法。内容的主体通过命名的上下文管理器对象使用资源,然后 aexit() 方法在块退出时自动调用,通常或通过异常。

    ...# open a context managerwith ContextManager() as manager:# ...# closed automatically

    这反映了 try-finally 表达式。

    ...# create the objectmanager = ContextManager()try:manager.__enter__()# ...finally:manager.__exit__()

    1.2. Asynchronous Context Manager

    “PEP 492 – Coroutines with async and await syntax”引入了异步上下文管理器。

    它们提供了一个上下文管理器,可以在进入和退出时挂起。

    aenteraexit 方法被定义为协同程序,由调用者等待。这是使用“async with”表达式实现的。

    因此,异步上下文管理器只能在 asyncio 程序中使用,例如在调用协程中。

    • 什么是“async with”

    “async with”表达式用于创建和使用异步上下文管理器。它是“with”表达式的扩展,用于异步程序中的协程。

    “async with”表达式就像用于上下文管理器的“with”表达式,除了它允许在协同程序中使用异步上下文管理器。

    为了更好地理解“async with”,让我们仔细看看异步上下文管理器。async with 表达式允许协程创建和使用上下文管理器的异步版本。

    ...# create and use an asynchronous context managerasync with AsyncContextManager() as manager:# ...

    这相当于:

    ...# create or enter the async context managermanager = await AsyncContextManager()try:# ...finally:# close or exit the context managerawait manager.close()

    请注意,我们正在实现与传统上下文管理器大致相同的模式,只是创建和关闭上下文管理器涉及等待协程。

    这会暂停当前协程的执行,调度一个新的协程并等待它完成。因此,异步上下文管理器必须实现必须通过 async def 表达式定义的 aenter() 和 aexit() 方法。这使得它们自己协程也可能等待。

    2. 如何使用异步上下文管理器

    在本节中,我们将探讨如何在我们的 asyncio 程序中定义、创建和使用异步上下文管理器。

    2.1. 定义

    我们可以将异步上下文管理器定义为实现 aenter() 和 aexit() 方法的 Python 对象。

    重要的是,这两种方法都必须使用“async def”定义为协程,因此必须返回可等待对象。

    # define an asynchronous context managerclass AsyncContextManager:    # enter the async context manager    async def __aenter__(self):        # report a message        print('>entering the context manager')    # exit the async context manager    async def __aexit__(self, exc_type, exc, tb):        # report a message        print('>exiting the context manager')

    因为每个方法都是协程,所以它们本身可能等待协程或任务。

    # define an asynchronous context managerclass AsyncContextManager:    # enter the async context manager    async def __aenter__(self):        # report a message        print('>entering the context manager')        # block for a moment        await asyncio.sleep(0.5)    # exit the async context manager    async def __aexit__(self, exc_type, exc, tb):        # report a message        print('>exiting the context manager')        # block for a moment        await asyncio.sleep(0.5)

    2.2. 使用

    通过“async with”表达式使用异步上下文管理器。这将自动等待进入和退出协程,根据需要暂停调用协程。

    ...# use an asynchronous context managerasync with AsyncContextManager() as manager:# ...

    因此,“async with”表达式和异步上下文管理器更普遍地只能在 asyncio 程序中使用,例如在协程中。

    现在我们知道如何使用异步上下文管理器,让我们看一个有效的例子。

    3. 异步上下文管理器和“异步”示例

    我们可以探索如何通过“async with”表达式使用异步上下文管理器。

    在这个例子中,我们将更新上面的例子,以正常方式使用上下文管理器。

    我们将使用“async with”表达式,并在一行中创建并进入上下文管理器。这将自动等待 enter 方法。

    然后我们可以在内部块中使用管理器。在这种情况下,我们将只报告一条消息。

    退出内部块将自动等待上下文管理器的退出方法。将这个例子与前面的例子进行对比,可以看出“async with”表达式在 asyncio 程序中为我们做了多少繁重的工作。

    # SuperFastPython.com# example of an asynchronous context manager via async withimport asyncio# define an asynchronous context managerclass AsyncContextManager:    # enter the async context manager    async def __aenter__(self):        # report a message        print('>entering the context manager')        # block for a moment        await asyncio.sleep(0.5)    # exit the async context manager    async def __aexit__(self, exc_type, exc, tb):        # report a message        print('>exiting the context manager')        # block for a moment        await asyncio.sleep(0.5)# define a simple coroutineasync def custom_coroutine():    # create and use the asynchronous context manager    async with AsyncContextManager() as manager:        # report the result        print(f'within the manager')# start the asyncio programasyncio.run(custom_coroutine())

    运行示例首先创建 main() 协程并将其用作 asyncio 程序的入口点。

    main() 协程运行并在“async with”表达式中创建我们的 AsyncContextManager 类的实例。

    该表达式自动调用 enter 方法并等待协程。报告一条消息,协程暂时阻塞。

    main() 协程恢复并执行上下文管理器的主体,打印一条消息。

    块退出,自动等待上下文管理器的退出方法,报告消息并休眠片刻。

    这突出了 asyncio 程序中异步上下文管理器的正常使用模式。

    >entering the context managerwithin the manager>exiting the context manager

    到此,相信大家对“Python异步之上下文管理器怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: Python异步之上下文管理器怎么使用

    本文链接: https://lsjlt.com/news/352690.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Python异步之上下文管理器怎么使用
      本篇内容主要讲解“Python异步之上下文管理器怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python异步之上下文管理器怎么使用”吧!正文上下文管理器是一种 Python 构造,它提...
      99+
      2023-07-05
    • 如何使用Python异步之上下文管理器
      目录正文1. 什么是异步上下文管理器1.1. Context Manager1.2. Asynchronous Context Manager2. 如何使用异步上下文管理器2.1. ...
      99+
      2023-03-22
      Python之上下文管理器 Python异步
    • Python上下文管理器怎么使用
      这篇文章主要介绍了Python上下文管理器怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python上下文管理器怎么使用文章都会有所收获,下面我们一起来看看吧。什么是上...
      99+
      2024-04-02
    • python上下文管理器怎么解决异常
      这篇文章给大家分享的是有关python上下文管理器怎么解决异常的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌...
      99+
      2023-06-14
    • python上下文管理器使用场景及异常处理
      目录引言1、先看看最简单的例子,with语句2、什么是上下文管理器?3、上下文管理器的原理过程如下:4、上下文管理器的应用场景:4.1 数据库连接4.2上下文管理器的异常处理引言 使...
      99+
      2024-04-02
    • chatGPT之Python API怎么启用上下文管理
      这篇文章主要讲解了“chatGPT之Python API怎么启用上下文管理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“chatGPT之Python API怎么启用上下文...
      99+
      2023-07-05
    • 怎么在python中使用上下文管理
      本篇文章为大家展示了怎么在python中使用上下文管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型...
      99+
      2023-06-14
    • Python上下文管理器是什么及怎么使用
      这篇“Python上下文管理器是什么及怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python上下文管理器是什么及...
      99+
      2023-07-06
    • 我要学python之上下文管理
      上下文管理 我们通常在写jdbc连接的时候都会写打开连接,使用连接,关闭连接。为了把资源合理利用,同时这些打开,关闭的工作是重复的工作,那么这些活能不能交给工具去做呢?答案肯定是可以的,不然怎么会有那么多的数据层中间件呢?我们要说的这个py...
      99+
      2023-01-31
      下文 我要学 python
    • 如何在python中使用上下文管理器
      如何在python中使用上下文管理器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Pytho...
      99+
      2023-06-14
    • Python上下文管理器详细使用教程
      目录上下文管理器和with块contextlib模块@contextmanager 装饰器@contextmanager 原理和注意事项with语句会设置一个临时的上下文,交给上下文...
      99+
      2023-02-08
      Python上下文管理器 Python上下文
    • python上下文管理器怎么实现类
      本篇内容介绍了“python上下文管理器怎么实现类”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明通过定义__enter__和__exit...
      99+
      2023-06-20
    • python上下文管理器是什么
      本篇文章给大家分享的是有关python上下文管理器是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的五大特点是什么python的五大特点:1.简单易学,开发程序...
      99+
      2023-06-14
    • Python异步之生成器怎么使用
      这篇文章主要介绍“Python异步之生成器怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python异步之生成器怎么使用”文章能帮助大家解决问题。正文生成器是 Python 的基本组成部分。...
      99+
      2023-07-05
    • Python异步之迭代器怎么使用
      这篇文章主要介绍“Python异步之迭代器怎么使用”,在日常操作中,相信很多人在Python异步之迭代器怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python异步之迭代器怎么使用”的疑惑有所帮助!...
      99+
      2023-07-05
    • 怎么用上下文管理器扩展Python计时器
      本文小编为大家详细介绍“怎么用上下文管理器扩展Python计时器”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用上下文管理器扩展Python计时器”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一个 Pyth...
      99+
      2023-07-06
    • Python上下文管理器Content Manager
      在 Python 中,我们会经常听到上下文管理器(Context Manager),那我们探讨下这是什么,又有什么功能。 在 Python 中的上下文管理器中,使用 with 打开文件是使用最多的,其中离开 wit...
      99+
      2022-06-02
      Python上下文管理器 Python Content Manager
    • python上下文管理器协议怎么实现
      这篇文章主要介绍了python上下文管理器协议怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python上下文管理器协议怎么实现文章都会有所收获,下面我们一起来看看吧。前言在上下文管理器协议的过程中,涉...
      99+
      2023-07-02
    • Python上下文管理器的作用是什么
      本篇内容介绍了“Python上下文管理器的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明上下文管理器允许在需要时准确分配和释放...
      99+
      2023-06-20
    • Python with和上下文管理工具怎么用
      这篇文章主要介绍了Python with和上下文管理工具怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python with和上下文管理工具怎么用文章都会有所收获,下面我们一起来看看吧。前言如果你有阅读源...
      99+
      2023-06-27
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作