等待任何未来的异步

2023-11-22

我正在尝试使用 asyncio 来处理并发网络 I/O。大量的功能将被安排在一个点上,而每个功能完成所需的时间差异很大。然后,接收到的数据将在每个输出的单独进程中进行处理。

处理数据的顺序不相关,因此考虑到输出的等待时间可能很长,我想await无论未来先完成什么,而不是预定义的顺序。

def fetch(x):
    sleep()

async def main():
    futures = [loop.run_in_executor(None, fetch, x) for x in range(50)]
    for f in futures:
       await f

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

通常,按照 future 排队的顺序等待就可以了:

Well behaved functions profiler graph

蓝色代表每个任务在执行器队列中的时间,即run_in_executor已被调用,但该函数尚未执行,因为执行器仅同时运行 5 个任务;绿色是执行函数本身所花费的时间;红色是等待所有之前的 future 所花费的时间await.

Volatile functions profiler graph

在我的情况下,函数在时间上变化很大,在等待队列中的先前 future 等待时会损失大量时间,而我可以在本地处理 GET 输出。这使得我的系统空闲一段时间,只有在多个输出同时完成时才会被淹没,然后跳回空闲状态等待更多请求完成。

有没有办法await无论什么 future 首先在执行器中完成?


看起来您正在寻找异步等待 with return_when=asyncio.FIRST_COMPLETED.

def fetch(x):
    sleep()

async def main():
    futures = [loop.run_in_executor(None, fetch, x) for x in range(50)]
    while futures:
        done, futures = await asyncio.wait(futures, 
            loop=loop, return_when=asyncio.FIRST_COMPLETED)  
        for f in done:
            await f

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

等待任何未来的异步 的相关文章

随机推荐

  • 使用 Git 创建更改文件的存档

    我正在寻找一个简单的解决方案来存档最近更改的文件 我得到这个简单的命令google git archive o update zip HEAD git diff name only HEAD 当我在 GIT BASH 中运行它时 它一直说致
  • 如何编写 ANSI C 控制台屏幕缓冲区?

    我正在制作一个基于 ASCII 的游戏 到处都有人说要使用 MSDN 中的 Console Write 如果你使用的是 Windows 那就太棒了 但我没有 因此 我尝试用 C 语言编写一个函数或一组函数 可以在两个屏幕缓冲区之间交替 并将
  • NameValuePair 在 API 22 中已弃用

    现在 namevaluepair 在 API 22 中已被弃用 如果我想实现 namevaluepair 接口 我该怎么办 下面是我的代码 package com example passpass import org apache htt
  • Python csv:UnicodeDecodeError

    我正在用Python读取一个文件csv模块 并且还有另一个编码问题 抱歉 这里有太多问题 在 CSV 文件中 有 符号 读入该行并打印后 它们已变为 xa3 尝试将它们编码为 Unicode 会产生UnicodeDecodeError ro
  • h5py,访问SVHN中Datasets中的数据

    我想读书街景门牌号 SVHN 数据集通过使用h5py In 117 def printname name print name In 118 data digitStruct visit printname bbox name 数据中有两组
  • 检测与 Maven 的依赖冲突

    我有一个 Maven 构建的 Java 应用程序 它引入了许多库 该应用程序位于一个 git 存储库中 具有其自己的 Maven 构建 每个库位于其自己的 git 存储库中 具有其自己的 Maven 构建 此外 应用程序和一些库都依赖于 g
  • SQLSTATE[HY000] [1045] 用户“用户名”@“localhost”的访问被拒绝(使用密码:YES)

    在我的 Ubuntu VM 中 我不断收到 SQLSTATE HY000 1045 用户 用户名 localhost 的访问被拒绝 使用密码 YES update 我在 env 文件中像这样配置了我的数据库 DB HOST 45 55 88
  • 没有类定义的反序列化对象实例

    任何人都知道从二进制 java 序列化对象创建 java 对象实例的工具 脚本 程序 任何东西吗 我没有 class 文件 所以我不能 据我所知 简单地创建一个 ObjectInputStream 并从那里加载它 该对象具有默认的序列化机制
  • DataGridView SelectionChanged 事件多次触发

    在我的应用程序中 我使用 DataGridView 来显示列表 当用户在数据网格视图中选择一条记录时 它应该在另一个面板中显示详细信息 对于选择 我被要求使用 DataGridView1 SelectionChanged 事件 DataGr
  • Android:如何从收到的短信中获取电话号码?

    我有一个广播接收器 SMSApp 它的 onReceive 会从意图中读取bundleExtras 在这里 我如何从bundleExtras中读取电话号码 if intent getAction equals SMS RECEIVED Bu
  • 本地报表处理期间发生错误。报表的定义“无效”

    我是使用 SSRS 的新手 我正在使用一个 rdlc文件用于使用 VS 2012 生成 PDF 报告 当我尝试设置如下参数时 ReportParameter param new ReportParameter kvp Key kvp Val
  • Gnuplot PDF 终端在 Mac 上出现字体问题

    出乎意料的是 我的 Gnuplot 开始出现问题pdfcairo终端 生成的 PDF 文件中的字体被卡住 就好像各个字符的宽度被设置为零一样 我在 Mac OS 上使用 Gnuplot 5 2 7 通过自制程序安装 这里是一个最小的不起作用
  • java.lang.ClassNotFoundException:在更新 sdk 后未在路径上找到类: DexPathList

    大家好 我的应用程序一直工作正常 直到昨天 我昨天更新了我的 SDK 它首先开始出现错误 然后出现错误 在值 v24 处找不到资源 像这样的事情我通过更改 build gradle 中的以下行来搜索并解决它 compileSdkVersio
  • iPhone:如何使用平移手势移动状态栏

    就像 Instagram 探索 选项卡一样 当我滚动内容时 状态栏也会移动 总是打电话全屏滚动 like here 当用户滚动tableView时 NavigationBar TabBar同时滚动显示或隐藏 我的问题是 不仅是Navigat
  • SRV 记录的 Java DNS 查找

    在下面的 java 代码中 我进行 DNS SRV 记录查找 以解析给定域名 例如 root 1000000000 blubluzone com 的目标域名和关联端口 用 表示的查找函数HERE 下面以某种方式返回 null 我无法获得查询
  • 为什么我必须在所有响应中传递 RequestContext?

    我想在导航菜单中突出显示当前页面 显然 当您在菜单链接的页面上时 我需要为菜单链接提供一个类似 活动 的类 这是一个经典问题 我见过很多解决方案proposed 我的问题是我讨厌他们所有人 并且认为他们都不是很干 例如 register s
  • 将图像内容从相机加载到文件

    我正在使用phonegap API使用以下指令拍照 或从库中选择 MyApp directive Camera function return restrict A require ngModel link function scope e
  • 为什么具有委派域访问权限的服务帐户仍然需要模拟?

    我正在考虑使用 OAuth 2 0服务帐户 and 域范围内的授权将我们的服务与 Google Apps 集成 一个特定的用例是 当 Google Apps 客户注册我们的服务时 请利用客户现有的组织结构或资源 组织单位 群组 设备 用户
  • 将对象与左侧的常量相乘

    我有一个Matrix类并且它已经超载了 用于标量和矩阵乘法的运算符 template
  • 等待任何未来的异步

    我正在尝试使用 asyncio 来处理并发网络 I O 大量的功能将被安排在一个点上 而每个功能完成所需的时间差异很大 然后 接收到的数据将在每个输出的单独进程中进行处理 处理数据的顺序不相关 因此考虑到输出的等待时间可能很长 我想awai