Python 异步: 同时运行多个协程(10)
asyncio 的一个好处是我们可以同时运行许多协程。这些协同程序可以在一个组中创建并存储,然后同时一起执行。这可以使用 asyncio.gather() 函数来实现。
让我们仔细看看。
1. 什么是 Asyncio gather()
asyncio.gather() 模块函数允许调用者将多个可等待对象组合在一起。分组后,可等待对象可以并发执行、等待和取消。
它是一个有用的实用函数,可用于分组和执行多个协程或多个任务。
...
# run a collection of awaitables
results = await asyncio.gather(coro1(), asyncio.create_task(coro2()))
在我们可能预先创建许多任务或协程然后希望一次执行它们并等待它们全部完成后再继续的情况下,我们可以使用 asyncio.gather() 函数。
这是一种可能的情况,其中需要许多类似任务的结果,例如具有不同数据的相同任务或协程。
可等待对象可以并发执行,返回结果,并且主程序可以通过使用它所依赖的结果来恢复。
gather() 函数比简单地等待任务完成更强大。它允许将一组可等待对象视为单个可等待对象。
通过 await 表达式执行并等待组中的所有可等待对象完成。 从所有分组的等待对象中获取结果,稍后通过 result() 方法检索。 要通过 cancel() 方法取消的一组等待对象。 通过 done() 方法检查组中的所有可等待对象是否已完成。 仅当组中的所有任务完成时才执行回调函数。
2. 如何使用 Asyncio gather()
在本节中,我们将仔细研究如何使用 asyncio.gather() 函数。
asyncio.gather() 函数将一个或多个可等待对象作为参数。回想一下,可等待对象可能是协程、Future 或 Task。
因此,我们可以调用 gather() 函数:
多项任务 多个协程 任务和协程的混合
...
# execute multiple coroutines
asyncio.gather(coro1(), coro2())
如果 Task 对象被提供给 gather(),它们将已经在运行,因为 Tasks 被安排为创建的一部分。asyncio.gather() 函数将可等待对象作为位置参数。
我们不能创建可等待对象的列表或集合并将其提供给收集,因为这会导致错误。
...
# cannot provide a list of awaitables directly
asyncio.gather([coro1(), coro2()])
如果首先使用星号运算符 (*) 将其解压缩到单独的表达式中,则可以提供等待列表。
...
# gather with an unpacked list of awaitables
asyncio.gather(*[coro1(), coro2()])
如果协程提供给 gather(),它们会自动包装在 Task 对象中。gather() 函数不会阻塞。
相反,它返回一个代表可等待对象组的 asyncio.Future 对象。
...
# get a future that represents multiple awaitables
group = asyncio.gather(coro1(), coro2())
一旦创建了 Future 对象,它就会在事件循环中自动调度。awaitable 代表组,组中的所有 awaitable 都会尽快执行。这意味着如果调用者什么都不做,那么预定的可等待对象组将运行(假设调用者挂起)。
这也意味着您不必等待从 gather() 返回的 Future。
...
# get a future that represents multiple awaitables
group = asyncio.gather(coro1(), coro2())
# suspend and wait a while, the group may be executing..
await asyncio.sleep(10)
可以等待返回的 Future 对象,它将等待组中的所有可等待对象完成。
...
# run the group of awaitables
await group
等待从 gather() 返回的 Future 将返回可等待对象的返回值列表。
如果可等待对象没有返回值,则此列表将包含默认的“无”返回值。
...
# run the group of awaitables and get return values
results = await group
这通常在一行中执行。
...
# run tasks and get results on one line
results = await asyncio.gather(coro1(), coro2())
3. 列表中多个协程的 gather() 示例
预先创建多个协程然后再收集它们是很常见的。这允许程序准备要并发执行的任务,然后立即触发它们的并发执行并等待它们完成。
我们可以手动或使用列表理解将许多协程收集到一个列表中。
...
# create many coroutines
coros = [task_coro(i) for i in range(10)]
然后我们可以用列表中的所有协程调用 gather()。协程列表不能直接提供给 gather() 函数,因为这会导致错误。相反,gather() 函数要求将每个可等待对象作为单独的位置参数提供。
这可以通过将列表展开为单独的表达式并将它们传递给 gather() 函数来实现。星号运算符 (*) 将为我们执行此操作。
...
# run the tasks
await asyncio.gather(*coros)
将它们结合在一起,下面列出了使用 gather() 运行预先准备好的协程列表的完整示例。
# SuperFastPython.com
# example of gather for many coroutines in a list
import asyncio
# coroutine used for a task
async def task_coro(value):
# report a message
print(f'>task {value} executing')
# sleep for a moment
await asyncio.sleep(1)
# coroutine used for the entry point
async def main():
# report a message
print('main starting')
# create many coroutines
coros = [task_coro(i) for i in range(10)]
# run the tasks
await asyncio.gather(*coros)
# report a message
print('main done')
# start the asyncio program
asyncio.run(main())
运行该示例会执行 main() 协程作为程序的入口点。main() 协程然后使用列表理解创建一个包含 10 个协程对象的列表。然后将此列表提供给 gather() 函数,并使用星号运算符将其解压缩为 10 个单独的表达式。
然后 main() 协程等待从调用 gather() 返回的 Future 对象,暂停并等待所有调度的协程完成它们的执行。协程会尽快运行,报告它们独特的消息并在终止前休眠。
只有在组中的所有协程都完成后,main() 协程才会恢复并报告其最终消息。这突出了我们如何准备协程集合并将它们作为单独的表达式提供给 gather() 函数。
main starting
>task 0 executing
>task 1 executing
>task 2 executing
>task 3 executing
>task 4 executing
>task 5 executing
>task 6 executing
>task 7 executing
>task 8 executing
>task 9 executing
main done
本文由 mdnice 多平台发布
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Python 异步: 同时运行多个协程(10)
asyncio 的一个好处是我们可以同时运行许多协程。这些协同程序可以在一个组中创建并存储,然后同时一起执行。这可以使用 asyncio.gather() 函数来实现。 让我们仔细看看。 1. 什么是 Asyncio gather() asyncio.gather() 模块函数允许调用者将多个可等待对象组合在一…...
![](https://img-blog.csdnimg.cn/f83835ce7ad94e4ba78e9124b5b23e41.png)
SVN 获取多版本间的更新内容
文章目录背景介绍操作步骤 - 获取某段时间内的代码更新内容背景介绍 公司有个项目期初明确要做微信小程序,没有做其他端的意向,并且当时团队人数有限,没有项目实践过 uniapp,项目时间周期紧,就没有用 uniapp 去实现 然…...
![](https://www.ngui.cc/images/no-images.jpg)
c++ const使用说明
作⽤ 1. 修饰变量,说明该变量不可以被改变; 2. 修饰指针,分为指向常量的指针和指针常量; 3. 常量引⽤,经常⽤于形参类型,即避免了拷⻉,⼜避免了函数对值的修改; 4. 修饰成员函数…...
![](https://www.ngui.cc/images/no-images.jpg)
VSTO 开发 EXCEL 委托与多线程的极简示例
VSTO 开发 EXCEL 委托与多线程的极简示例问题解决步骤代码问题 这几天做 excel 加载项时遇到一个问题,对话框弹窗显示后,需要等待网络数据的返回来填充 ListBox 控件,由于网络延迟问题,整个窗体连带 Excel 一起白屏卡顿 5-10秒&a…...
![](https://img-blog.csdnimg.cn/17a13e052f5741aea945e3351d0e78a4.png)
spring之使用Spring的AOP
文章目录前言一、准备工作1、添加相应的依赖2、添加相应的命名空间3、创建目标类4、创建切面二、使用AOP1.在切面类中编写增强代码以及切点表达式2、开启aspectj的自动代理3、测试类4、测试结果前言 Spring对AOP的实现包括以下三种方式 1、Spring框架结合AspectJ框架实现的AOP…...
![](https://www.ngui.cc/images/no-images.jpg)
LeetCode LCP 66. 最小展台数量
力扣嘉年华将举办一系列展览活动,后勤部将负责为每场展览提供所需要的展台。 已知后勤部得到了一份需求清单,记录了近期展览所需要的展台类型, demand[i][j] 表示第 i 天展览时第 j 个展台的类型。 在满足每一天展台需求的基础上,…...
![](https://www.ngui.cc/images/no-images.jpg)
设计模式之模板方法模式
什么是模板方法模式 模板方法模式定义了一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构就可以重定义该算法的某些特定步骤。 模板方法模式主要包含几下几个角色: AbstractClass(抽…...
![](https://img-blog.csdnimg.cn/img_convert/5c2ffefc74f593644d8f3cf3bafc085c.png)
Python数据挖掘基础
一、Matplotlib 画二维图表的python库,实现数据可视化 , 帮助理解数据,方便选择更合适的分析方法1、折线图1.1引入matplotlibimport matplotlib.pyplot as plt %matplotlib inlineplt.figure() plt.plot([1, 0, 9], [4, 5, 6]) plt.show()1.2…...
![](https://www.ngui.cc/images/no-images.jpg)
Go基础-函数
文章目录1 定义2 参数的写法3 返回值的写法4 空白符1 定义 函数是将输入数据通过一系列算法运算之后,输出对应的结果。函数一般都是一些特定的功能块,实现某一种功能的封装,降低代码的冗余性 语法 // 关键字 函数名 函数参数 返…...
![](https://img-blog.csdnimg.cn/d45edd4cc6c34bbea12ef9e28f89cc93.png)
AC的改进算法——TRPO、PPO
两类AC的改进算法 整理了动手学强化学习的学习内容 1. TRPO 算法(Trust Region Policy Optimization) 1.1. 前沿 策略梯度算法即沿着梯度方向迭代更新策略参数 。但是这种算法有一个明显的缺点:当策略网络沿着策略梯度更新参数,…...
![](https://img-blog.csdnimg.cn/b4e2975ebbf9416dab0327a04bc3041e.png)
【C++学习】list的使用及模拟实现
🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! list的使用及模拟实现😼构造函数🐵模拟实现😼迭代器🐵…...
![](https://img-blog.csdnimg.cn/80f46a462cd64cc69482c96b5572b61d.png)
动态规划专题精讲1
致前行的人: 要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 前言: 本篇文章为大家带来一种重要的算法题,就是动态规划类型相关的题目,动态规划类的题目在笔试和面试中是考察非常高…...
![](https://img-blog.csdnimg.cn/17f50603f2104e2e9e78b0699ab679a8.png#pic_center)
PPO(proximal policy optimization)算法
博客写到一半发现有篇讲的很清楚,直接化缘了 https://www.jianshu.com/p/9f113adc0c50 Policy gradient 强化学习的目标:学习到一个策略πθ(a∣s)\pi\theta(a|s)πθ(a∣s)来最大化期望回报。 一种直接的方法就是在策略空间中直接搜索来得到最优策略&…...
![](https://www.ngui.cc/images/no-images.jpg)
ElasticSearch基本使用
title: ElasticSearch基本使用 date: 2022-08-29 00:00:00 tags: ElasticSearch基本使用 categories:ElasticSearch 基本概念 随着ES版本的升级,文中有些概念可能已经废弃。 索引词(term) 一个能够被索引的精确值,区分大小写,可以通过term查…...
![](https://img-blog.csdnimg.cn/c6d926c6ed9947c195172569e9b1edf0.png)
windows微软商店下载应用失败/下载故障的解决办法;如何在网页上下载微软商店的应用
一、问题背景 设置惠普打印机时,需要安装hp smart,但是官方只提供微软商店这一下载渠道。 点击安装HP Smart,确定进入微软商店下载。 完全加载不出来,可能是因为开了代理。 把代理关了,就能正常打开了。 但是点击“…...
![](https://img-blog.csdnimg.cn/428bb3f410374b639642c698f42ea867.png#pic_center)
MySQL进阶篇之InnoDB存储引擎
06、InnoDB引擎 6.1、逻辑存储结构 表空间(Tablespace) 表空间在MySQL中最终会生成ibd文件,一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。 段(Segment) 段,分为数据段&#x…...
![](https://img-blog.csdnimg.cn/d49469a8b7a44fd78e401573fdb18ff1.png)
商标侵权行为的种类有哪些
商标侵权行为的种类有哪些 1、商标侵权行为的种类有以下七种: (1)未经商标注册人的许可,在同一种商品上使用与其注册商标相同的商标的; (2)未经商标注册人的许可,在同一种商品上使用与其注册商标近似的商标,或者在类似商品上使…...
![](https://img-blog.csdnimg.cn/img_convert/38bdec3e1d5c64c7d705081dfdda5ffc.png)
Similarity-Preserving KD(ICCV 2019)原理与代码解析
paper:Similarity-Preserving Knowledge Distillationcode:https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/SP.py背景本文的灵感来源于作者观察到在一个训练好的网络中,语义上相似的输入倾向于引起相似的…...
![](https://img-blog.csdnimg.cn/img_convert/8a4b7bb4ba3f0c5b8000ace24e91cfb5.png)
在Linux和Windows上安装seata-1.6.0
记录:381场景:在CentOS 7.9操作系统上,安装seata-1.6.0。在Windows上操作系统上,安装seata-1.6.0。Seata,一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。版本:JDK…...
![](https://img-blog.csdnimg.cn/img_convert/b3bf60e51e99c9772e5b8065181dc363.jpeg)
兼职任务平台收集(二)分享给有需要的朋友们
互联网时代,给人们带来了很大的便利。信息交流、生活缴费、足不出户购物、便捷出行、线上医疗、线上教育等等很多。可以说,网络的时代会一直存在着。很多人也在互联网上赚到了第一桶金,这跟他们的努力和付出是息息相关的。所谓一份耕耘&#…...
![](https://img-blog.csdnimg.cn/a822ed4da8864c01baa5809e97cda394.png)
目标检测三大数据格式VOC,YOLO,COCO的详细介绍
注:本文仅供学习,未经同意请勿转载 说明:该博客来源于xiaobai_Ry:2020年3月笔记 对应的PDF下载链接在:待上传 目录 目标检测常见数据集总结 V0C数据集(Annotation的格式是xmI) A. 数据集包含种类: B. V0C2007和V0C2012的区别…...
![](https://img-blog.csdnimg.cn/ffde03220a884be5ad765210536b916f.png)
SpringBoot实现统一返回接口(除AOP)
起因 关于使用AOP去实现统一返回接口在之前的博客中我们已经实现了,但我突然突发奇想,SpringBoot中异常类的统一返回好像是通过RestControllerAdvice 这个注解去完成的,那我是否也可以通过这个注解去实现统一返回接口。 正文 这个方法主要…...
![](https://www.ngui.cc/images/no-images.jpg)
ChatGpt - 基于人工智能检索进行论文写作
摘要 ChatGPT 是一款由 OpenAI 训练的大型语言模型,可用于各种自然语言处理任务,包括论文写作。使用 ChatGPT 可以帮助作者提高论文的语言流畅度、增强表达能力和提高文章质量。在写作过程中,作者可以使用 ChatGPT 生成自然语言的段落、句子、单词或者短语,作为启发式的写…...
![](https://img-blog.csdnimg.cn/img_convert/1b3ea23a7bf105ebaa0cc48157b6117d.png)
实例三:MATLAB APP design-多项式函数拟合
一、APP 界面设计展示 注:在左侧点击数据导入,选择自己的数据表,如果数据导入成功,在右侧的空白框就会显示数据导入成功。在多项式项数右侧框中输入项数,例如2、3、4等,点击计算按钮,右侧坐标框就会显示函数图像,在平均相对误差下面的空白框显示平均相对误差。...
![](https://www.ngui.cc/images/no-images.jpg)
springboot多种方式注入bean获取Bean
springboot动态注入bean1、创建Bean(demo)2、动态注入Bean3、通过注解注入Bean4、通过config配置注入Bean5、通过Import注解导入6、使用FactoryBean接口7、实现BeanDefinitionRegistryPostProcessor接口1、创建Bean(demo) Data public class Demo(){private String name;publi…...
![](https://img-blog.csdnimg.cn/img_convert/03c34b0ef08fcf773f62436d4527073b.png)
Markdown及其语法详细介绍(全面)
文章目录一、基本语法1.标题2.段落和换行3.强调4.列表5.链接6.图片7.引用8.代码9.分割线10表格二、扩展语法1.标题锚点标题 {#anchor}2.脚注3.自动链接4.任务列表5.删除线6.表情符号7.数学公式三、Markdown 应用1.文档编辑2.博客写作3.代码笔记四、常见的工具和平台支持 Markdo…...
![](https://img-blog.csdnimg.cn/img_convert/f1ac9f49e401671fe687b5f8b351e47e.png)
在Linux和Windows上安装sentinel-1.8.5
记录:380场景:在CentOS 7.9操作系统上,安装sentinel-1.8.5。在Windows上操作系统上,安装sentinel-1.8.5。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件。版本:JDK 1.8 sentinel-1.8.5 CentOS 7.9官网地址…...
![](https://www.ngui.cc/images/no-images.jpg)
面试攻略,Java 基础面试 100 问(十)
StringBuffer、StringBuilder、String区别 线程安全 StringBuffer:线程安全,StringBuilder:线程不安全。 因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 synchronized 修饰。 StringBuf…...
![](https://img-blog.csdnimg.cn/4faeb281d50d49878b3ceccc8fbad66c.png)
Zero-shot(零次学习)简介
zero-shot基本概念 首先通过一个例子来引入zero-shot的概念。假设我们已知驴子和马的形态特征,又已知老虎和鬣狗都是又相间条纹的动物,熊猫和企鹅是黑白相间的动物,再次的基础上,我们定义斑马是黑白条纹相间的马科动物。不看任何斑…...
![](https://img-blog.csdnimg.cn/img_convert/db0ad53298bd140736b6b9f22c70206c.png)
51单片机简易电阻电感电容RLC测量仪仿真设计
51单片机简易电阻电感电容RLC测量仪仿真( proteus仿真程序讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0040 51单片机简易电阻电感电容RLC测量仪仿真51单片机最小系统的相关知识复位…...
wordpress评论审核/泉州全网营销优化
穷则独善其身,达则兼善天下。——《孟子》 1 plot (x,y)能够创建散点图,其中x代表横坐标,y代表纵坐标,这两个向量坐标一致。 2 若我们向他人展示图形的话,那么绘图时注意使用xlab,ylab 和mai…...
![](https://img-blog.csdnimg.cn/20210530110216747.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTYzMzUwMQ==,size_16,color_FFFFFF,t_70)
网站怎么做可以增加点击率/网络营销策划书的范文
java笔记之九————内部类和匿名内部类 内部类 实现内部类 访问重名的外部类变量。 局部内部类 局部内部类的final问题 匿名内部类 匿名内部类的定义使用 匿名内部类的注意事项 类作为成员变量类型 武器类成员变量 游戏角色主类 实现类创造对象的主题函数 接口作为成员…...
![](/images/no-images.jpg)
c 做网站好嘛/网站搭建公司哪家好
嘟嘟嘟 这题刚开始把\(17!\)想成了\(2 ^ {17}\),以为全排暴力枚举就行,然后写一半发现好像只能过\(n \leqslant 10\)的点。 讨论正解之前,我们先想状压dp,毕竟这个数据范围就像状压。\(dp[i][j][S]\)表示点\(i\)所在子树中&#x…...
![](/images/no-images.jpg)
营销网站建设公司地址/查收录网站
软件工程概述 软件的定义 软件是计算机程序、规程、以及运行计算机系统可能需要的相关文档和数据 或者说 软件是包括程序、数据和文档的完整集合 软件是一种具有抽象的逻辑实体 软件的开发是一种逻辑思维成熟的过程,而无明显的制造过程 软件的分类 按照划分方式的…...
![](/images/no-images.jpg)
深圳做网站比较好/什么软件可以免费发广告
import csv#从文件读取reader csv.reader(file(srcFilePath,rb))for line in reader: #忽略第一行 if reader.line_num 1: continue #line是个list,取得所有需要的值 type line[0]#写入文件writer csv.writer(open(targetFile,"wb"…...
![](/images/no-images.jpg)
全国最新疫情情况/锦州seo推广
OVal是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件、Annotation、POJOs进行设定。可以使用纯Java语言、JavaScript、Groovy、BeanShell等进行规则的编写。下面学步园小编来讲解下Java对象校验框架Oval怎么使用?Java对象校验框架Oval怎…...