返回顶部
首页 > 资讯 > 后端开发 > Python >Python怎么同时运行多个协程
  • 591
分享到

Python怎么同时运行多个协程

2023-07-05 15:07:02 591人浏览 安东尼

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

摘要

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

这篇文章主要介绍“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怎么同时运行多个协程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网Python频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Python怎么同时运行多个协程

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

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

猜你喜欢
  • Python怎么同时运行多个协程
    这篇文章主要介绍“Python怎么同时运行多个协程”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么同时运行多个协程”文章能帮助大家解决问题。正文asyncio 的一个好处是我们可以同时...
    99+
    2023-07-05
  • Python 异之如何同时运行多个协程详解
    目录正文1. 什么是 Asyncio gather()2. 如何使用 Asyncio gather()3. 列表中多个协程的 gather() 示例正文 asyncio 的一个好处...
    99+
    2023-03-22
    Python 异步同时运行多个协程 Python 异步协程
  • python怎么同时运行多个函数
    在python同时运行多个函数,具体方法如下:def fun1():while True:time.sleep(2)print("fun1")def fun2():while True:time.sleep(6)print("fun2")t...
    99+
    2024-04-02
  • python如何同时运行两个函数
    在python中利用线程同时运行两个函数,具体方法如下:def fun1():while True:time.sleep(2)print("fun1")def fun2():while True:time.sleep(6)print("fu...
    99+
    2024-04-02
  • 怎么在Python的线程中运行协程
    这篇文章主要讲解了“怎么在Python的线程中运行协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python的线程中运行协程”吧!有没有办法让同步代码与异步代码看起来也是同时运行的...
    99+
    2023-06-16
  • pycharm怎么运行多个程序
    在 pycharm 中运行多个程序的方法有两种:使用“运行”配置或使用 python 控制台,例如使用 subprocess 模块创建新进程并运行 python 程序。 PyCharm...
    99+
    2024-04-17
    python pycharm
  • python scrapy项目下spiders内多个爬虫同时运行的实现
    一般创建了scrapy文件夹后,可能需要写多个爬虫,如果想让它们同时运行而不是顺次运行的话,得怎么做? a、在spiders目录的同级目录下创建一个commands目录,并在该目录...
    99+
    2024-04-02
  • chatgpt赋能python:如何同时运行两个Python代码
    如何同时运行两个Python代码 Python是一种广泛使用的高级编程语言,广泛应用于数据科学、人工智能、网络开发等领域。在学习和使用Python时,我们经常需要同时运行多个代码文件。本文将介绍如何使...
    99+
    2023-09-14
    python chatgpt 开发语言 计算机
  • c语言怎么运行多个程序
    要在C语言中运行多个程序,可以使用多线程或者多进程的方式。 多线程: 可以使用pthread库来创建和管理多个线程。首先,需要包...
    99+
    2023-10-27
    c语言
  • c++中一个对象怎么运行多个线程
    在C++中,一个对象可以通过创建多个线程来同时执行多个任务。为了实现这一点,你可以使用C++的多线程库,例如std::thread或...
    99+
    2024-02-29
    c++
  • python多个input如何运行
    在Python中,可以使用input()函数来获取用户的输入。要获取多个输入,可以多次调用input()函数,并将每次调用的结果存储...
    99+
    2023-10-18
    python
  • Vmware7虚拟机安装Win10以便同时运行多个系统
      虚拟机上安装新系统,与电脑上原先的系统完全隔离,有了虚拟机,就可以在电脑上同时运行多个系统。这个方法犹如360安全卫士隔离沙箱里运行软件一样。今天带来了vmware7虚拟机安装win10教程。   第一步、下载安装V...
    99+
    2023-06-09
    Vmware7 虚拟机 Win10 Vmware Win 系统
  • Python怎么运行_Python运行教程
    1、首先在pycharm中点击【文件】-【打开】,选择py文件并确定。 2、然后在菜单栏中点击【运行】-【运行】,或选择右侧快捷运行按钮,或在文件注释栏选择运行按钮。 3、最后在底部...
    99+
    2024-04-02
  • 如何使用阿里云服务器同时运行多个域名
    阿里云服务器是一种灵活、可扩展的云计算服务,可以为用户提供强大的计算能力和存储资源。然而,有时候用户可能需要同时运行多个域名,这时候就需要使用阿里云服务器来实现。本文将介绍如何使用阿里云服务器同时运行多个域名的方法。 详细说明:步骤一:购买...
    99+
    2024-01-20
    多个 阿里 如何使用
  • 2G 4核阿里云服务器可以同时运行多少个应用程序?
    阿里云服务器提供了多种配置,包括2G4核的配置。对于这种配置的阿里云服务器,很多人都有一个疑问,那就是这种配置的阿里云服务器可以同时运行多少个应用程序?接下来,我们将详细解答这个问题。 阿里云服务器的性能取决于许多因素,包括CPU的核心数...
    99+
    2023-12-10
    阿里 多少个 应用程序
  • c++中怎么实现一个对象运行多个线程
    在C++中,可以使用线程库来实现一个对象运行多个线程。下面是一个简单的示例: #include #include class ...
    99+
    2023-10-25
    c++
  • 怎么在Linux中运行多个MySQL
    本篇内容介绍了“怎么在Linux中运行多个MySQL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一种在L...
    99+
    2024-04-02
  • 怎么在Windows中运行多个MySQL
    这篇文章主要讲解了“怎么在Windows中运行多个MySQL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Windows中运行多个MySQL”吧!1....
    99+
    2024-04-02
  • pycharm怎么运行多个py文件
    在 pycharm 中运行多个 py 文件:打开文件并创建运行配置,添加脚本并配置选项。保存配置并运行,pycharm 将同时运行所有指定的 py 文件。输出和错误信息可在 "run" ...
    99+
    2024-04-25
    linux python pycharm
  • pycharm多个py文件怎么运行
    在 pycharm 中同时运行多个 py 文件的方法:创建或打开项目。创建或打开所需的文件。创建运行配置,选择文件或目录。运行配置,按顺序运行文件。查看输出,包括错误或警告。 PyCh...
    99+
    2024-04-25
    python pycharm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作