当前位置: 首页 > 知识库问答 >
问题:

寻求异步与/for的优点的解释

颛孙星海
2023-03-14

我不熟悉asyncio。我遇到了所有文件(https://github.com/Tinche/aiofiles)最近,在文档中看到它支持“async with”和“async for”我想了解它,但除了PEP 492没有太多细节外,没有太多好的报道。

PEP 492相关部分的快捷方式:

https://www.python.org/dev/peps/pep-0492/#asynchronous-context-managers-and-async-with

https://www.python.org/dev/peps/pep-0492/#asynchronous-iterators-and-async-for

如果有人不介意回答,我有几个问题:

>

在关于异步上下文管理器的PEP 492中,它说“异步上下文管理器是能够在其输入和退出方法中暂停执行的上下文管理器。”这是指使用wait调用协程吗?

共有1个答案

劳麒
2023-03-14

我正在学习的异步迭代器/上下文管理器的唯一明显好处是您可以在他们所需的魔术方法的实现中使用可等待的对象。我错过了什么吗?

你没有遗漏任何东西,除了暂停能力的重要性。如果没有可暂停的魔术方法,上下文管理器和迭代器将无法用于异步工作。例如,常规文件对象用作迭代器,从文件生成行。为了使异步文件对象(或流)提供等效的功能,它必须能够等待行的到来,从而挂起在其上迭代的协同路由。这同样适用于上下文管理器,其输入必须建立异步网络连接,等等。

[能够暂停执行]指的是使用await调用协同路由吗?

async def中使用wait是暂停执行的一种方法。另一种选择是将__aenter__等作为普通函数,返回实现其自己的__await__的自定义可等待对象。PEP 492从使用上下文管理器的代码的有利位置描述了功能,上下文管理器必须为其神奇的方法暂停做好准备-带有的async必须在async def中,并且它将在适当的位置对等待的代码进行脱色。

 类似资料:
  • 我希望我的请求触发一些长时间运行的操作,这些操作应该在后台执行。我编写了以下实现,应该在后台处理我的操作,但实际上我的请求是同步执行的: 在日志中,我看到以下内容: 我看到我的在另一个线程中执行,但出于某种原因,我的原始请求等待sleep完成 更新1:

  • 本文向大家介绍ajax异步请求详解,包括了ajax异步请求详解的使用技巧和注意事项,需要的朋友参考一下 做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事。既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.com学习,教程完善,适合初学者快速入门。 jQuery的引用,可以通过下载js文件导入,或通过外

  • 本文向大家介绍Node.js中的异步生成器与异步迭代详解,包括了Node.js中的异步生成器与异步迭代详解的使用技巧和注意事项,需要的朋友参考一下 前言 生成器函数在 JavaScript 中的出现早于引入 async/await,这意味着在创建异步生成器(始终返回 Promise 且可以 await 的生成器)的同时,还引入了许多需要注意的事项。 今天,我们将研究异步生成器及其近亲——异步迭代。

  • 问题内容: 我正在使用GraphicsMagick作为节点。我基本上是裁剪照片并检索用户上传的照片的exif数据。我不想阻塞等待这些任务完成的请求流,因此我需要使用异步函数来做到这一点。而且我认为我应该能够这样做,因为这些是node.js本身进行异步的I / O操作。 但是,正如我所见,GraphicsMagick中节点的所有功能都是同步功能。因此,我无法确定如何实现所需的功能。 我想到的一个想法

  • 我有一个Quarkus应用程序,它读取一个文件并发送请求(到另一个Quarkus微服务)。目前,我为文件的每一行发送一个请求。但这个过程花了这么长时间因为我有上千行。 我读过关于Vert.x的文章,我得到了一个对API的异步请求,这要感谢这个链接: https://quarkus.io/blog/mutiny-concurrent-uni/ 但我的问题是,我必须将请求的响应保存到一个数组中,最后保

  • 我有2个微服务(A和B)。 有一个接受POST请求的endpoint。当用户发出发布请求时,会发生以下情况: 服务A从POST请求正文中获取对象并将其存储在数据库中。 服务A将对象转换为不同的对象。新对象通过泽西HTTP客户端发送到服务B。 步骤 2 发生在我创建的 Java 线程池(Executors.new缓存线程池)上。通过在新线程上执行步骤 2,服务 A 的终结点的响应时间不受影响。 但是