我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python怎么同时运行多个协程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python怎么同时运行多个协程

这篇文章主要介绍“Python怎么同时运行多个协程”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么同时运行多个协程”文章能帮助大家解决问题。

正文

asyncio 的一个好处是我们可以同时运行许多协程。这些协同程序可以在一个组中创建并存储,然后同时一起执行。这可以使用 asyncio.gather() 函数来实现。

让我们仔细看看。

1. 什么是 Asyncio gather()

asyncio.gather() 模块函数允许调用者将多个可等待对象组合在一起。分组后,可等待对象可以并发执行、等待和取消。

它是一个有用的实用函数,可用于分组和执行多个协程或多个任务。

...# run a collection of awaitablesresults = 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 coroutinesasyncio.gather(coro1(), coro2())

如果 Task 对象被提供给 gather(),它们将已经在运行,因为 Tasks 被安排为创建的一部分。asyncio.gather() 函数将可等待对象作为位置参数。

我们不能创建可等待对象的列表或集合并将其提供给收集,因为这会导致错误。

...# cannot provide a list of awaitables directlyasyncio.gather([coro1(), coro2()])

如果首先使用星号运算符 (*) 将其解压缩到单独的表达式中,则可以提供等待列表。

...# gather with an unpacked list of awaitablesasyncio.gather(*[coro1(), coro2()])

如果协程提供给 gather(),它们会自动包装在 Task 对象中。gather() 函数不会阻塞。

相反,它返回一个代表可等待对象组的 asyncio.Future 对象。

...# get a future that represents multiple awaitablesgroup = asyncio.gather(coro1(), coro2())

一旦创建了 Future 对象,它就会在事件循环中自动调度。awaitable 代表组,组中的所有 awaitable 都会尽快执行。这意味着如果调用者什么都不做,那么预定的可等待对象组将运行(假设调用者挂起)。

这也意味着您不必等待从 gather() 返回的 Future。

...# get a future that represents multiple awaitablesgroup = asyncio.gather(coro1(), coro2())# suspend and wait a while, the group may be executing..await asyncio.sleep(10)

可以等待返回的 Future 对象,它将等待组中的所有可等待对象完成。

...# run the group of awaitablesawait group

等待从 gather() 返回的 Future 将返回可等待对象的返回值列表。

如果可等待对象没有返回值,则此列表将包含默认的“无”返回值。

...# run the group of awaitables and get return valuesresults = await group

这通常在一行中执行。

...# run tasks and get results on one lineresults = await asyncio.gather(coro1(), coro2())

3. 列表中多个协程的 gather() 示例

预先创建多个协程然后再收集它们是很常见的。这允许程序准备要并发执行的任务,然后立即触发它们的并发执行并等待它们完成。

我们可以手动或使用列表理解将许多协程收集到一个列表中。

...# create many coroutinescoros = [task_coro(i) for i in range(10)]

然后我们可以用列表中的所有协程调用 gather()。协程列表不能直接提供给 gather() 函数,因为这会导致错误。相反,gather() 函数要求将每个可等待对象作为单独的位置参数提供。

这可以通过将列表展开为单独的表达式并将它们传递给 gather() 函数来实现。星号运算符 (*) 将为我们执行此操作。

...# run the tasksawait asyncio.gather(*coros)

将它们结合在一起,下面列出了使用 gather() 运行预先准备好的协程列表的完整示例。

# SuperFastPython.com# example of gather for many coroutines in a listimport asyncio# coroutine used for a taskasync 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 pointasync 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 programasyncio.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

关于“Python怎么同时运行多个协程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python怎么同时运行多个协程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python怎么同时运行多个协程

这篇文章主要介绍“Python怎么同时运行多个协程”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么同时运行多个协程”文章能帮助大家解决问题。正文asyncio 的一个好处是我们可以同时
2023-07-05

Python 异之如何同时运行多个协程详解

这篇文章主要为大家介绍了Python 异之如何同时运行多个协程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-22

怎么在Python的线程中运行协程

这篇文章主要讲解了“怎么在Python的线程中运行协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python的线程中运行协程”吧!有没有办法让同步代码与异步代码看起来也是同时运行的
2023-06-16

pycharm怎么运行多个程序

在 pycharm 中运行多个程序的方法有两种:使用“运行”配置或使用 python 控制台,例如使用 subprocess 模块创建新进程并运行 python 程序。PyCharm 中运行多个程序PyCharm 是一个流行的 Pytho
pycharm怎么运行多个程序
2024-04-17

c语言怎么运行多个程序

要在C语言中运行多个程序,可以使用多线程或者多进程的方式。多线程:可以使用pthread库来创建和管理多个线程。首先,需要包含pthread.h头文件。然后,可以使用pthread_create函数创建一个新的线程,并指定要执行的函数。例
2023-10-27

c++中一个对象怎么运行多个线程

在C++中,一个对象可以通过创建多个线程来同时执行多个任务。为了实现这一点,你可以使用C++的多线程库,例如std::thread或boost::thread。首先,你需要在类中定义需要在不同线程中执行的函数或方法。然后,你可以创建一个线
c++中一个对象怎么运行多个线程
2024-02-29

Vmware7虚拟机安装Win10以便同时运行多个系统

虚拟机上安装新系统,与电脑上原先的系统完全隔离,有了虚拟机,就可以在电脑上同时运行多个系统。这个方法犹如360安全卫士隔离沙箱里运行软件一样。今天带来了vmware7虚拟机安装win10教程。第一步、下载安装Vmware Fusion 7,
2023-06-09

pycharm怎么运行多个py文件

在 pycharm 中运行多个 py 文件:打开文件并创建运行配置,添加脚本并配置选项。保存配置并运行,pycharm 将同时运行所有指定的 py 文件。输出和错误信息可在 "run" 工具窗口中查看。如何在 PyCharm 中运行多个 P
pycharm怎么运行多个py文件
2024-04-25

c++中怎么实现一个对象运行多个线程

在C++中,可以使用线程库来实现一个对象运行多个线程。下面是一个简单的示例:#include #include class MyObject {public:void threadFunc(int id) {for(int i = 0
2023-10-25

pycharm多个py文件怎么运行

在 pycharm 中同时运行多个 py 文件的方法:创建或打开项目。创建或打开所需的文件。创建运行配置,选择文件或目录。运行配置,按顺序运行文件。查看输出,包括错误或警告。PyCharm 中运行多个 Py 文件在 PyCharm 中同时
pycharm多个py文件怎么运行
2024-04-25

如何使用阿里云服务器同时运行多个域名

阿里云服务器是一种灵活、可扩展的云计算服务,可以为用户提供强大的计算能力和存储资源。然而,有时候用户可能需要同时运行多个域名,这时候就需要使用阿里云服务器来实现。本文将介绍如何使用阿里云服务器同时运行多个域名的方法。详细说明:步骤一:购买阿里云服务器首先,您需要在阿里云官网上购买一台适合您需求的服务器。您可以根据自己的
如何使用阿里云服务器同时运行多个域名
2024-01-20

2G 4核阿里云服务器可以同时运行多少个应用程序?

阿里云服务器提供了多种配置,包括2G4核的配置。对于这种配置的阿里云服务器,很多人都有一个疑问,那就是这种配置的阿里云服务器可以同时运行多少个应用程序?接下来,我们将详细解答这个问题。阿里云服务器的性能取决于许多因素,包括CPU的核心数、内存大小、硬盘速度等等。对于2G4核的阿里云服务器,其主要的性能参数是CPU
2G 4核阿里云服务器可以同时运行多少个应用程序?
2023-12-10

python怎么运行程序

python 程序的运行分为两步:1. 使用文本编辑器或 ide 在 python 文件中编写代码;2. 使用 python 解释器、idle 或第三方 ide 运行代码。如何运行 Python 程序Python 程序的运行分为两步:1
python怎么运行程序
2024-05-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录