iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python异步等待任务怎么使用
  • 351
分享到

Python异步等待任务怎么使用

2023-07-05 15:07:25 351人浏览 薄情痞子

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

摘要

今天小编给大家分享一下python异步等待任务怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正文我们可以通过 asy

今天小编给大家分享一下python异步等待任务怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

正文

我们可以通过 asyncio.wait() 函数等待异步任务完成。可以等待不同的条件,例如所有任务完成、第一个任务完成以及第一个任务因异常而失败。

让我们仔细看看。

1. 什么是 asyncio.wait()

asyncio.wait() 函数可用于等待一组异步任务完成。回想一下,asyncio 任务是包装协程的 asyncio.Task 类的一个实例。它允许独立调度和执行协程,Task 实例提供任务句柄以查询状态和获取结果。

wait() 函数允许我们等待一组任务完成。等待调用可以配置为等待不同的条件,例如所有任务完成、第一个任务完成以及第一个任务因错误而失败。

接下来,让我们看看如何使用 wait() 函数。

2. 如何使用 asyncio.wait()

asyncio.wait() 函数采用可等待对象的集合,通常是 Task 对象。

这可以是我们创建的列表、字典或任务对象集,例如通过在列表理解中调用 asyncio.create_task() 函数。

...# create many taskstasks = [asyncio.create_task(task_coro(i)) for i in range(10)]

asyncio.wait() 在满足任务集合的某些条件之前不会返回。默认情况下,条件是所有任务都已完成。

wait() 函数返回两个集合的元组。第一个集合包含所有满足条件的任务对象,第二个集合包含所有其他尚未满足条件的任务对象。

这些集被称为“完成”集和“待定”集。

...# wait for all tasks to completedone, pending = await asyncio.wait(tasks)

从技术上讲,asyncio.wait() 是一个返回协程的协程函数。然后我们可以等待这个协程,它将返回集合的元组。

...# create the wait coroutinewait_coro = asyncio.wait(tasks)# await the wait coroutinetuple = await wait_coro

等待的条件可以由默认设置为 asyncio.ALL_COMPLETED 的“return_when”参数指定。

...# wait for all tasks to completedone, pending = await asyncio.wait(tasks, return_when=asyncio.ALL_COMPLETED)

我们可以通过将 return_when 设置为 FIRST_COMPLETED 来等待第一个任务完成

...# wait for the first task to be completeddone, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)

当第一个任务完成并在完成集中返回时,其余任务不会被取消并继续并发执行。

我们可以通过将 return_when 设置为 FIRST_EXCEPTION 来等待第一个任务因异常而失败。

...# wait for the first task to faildone, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)

在这种情况下,完成集将包含第一个因异常而失败的任务。如果没有任务因异常而失败,则完成集将包含所有任务,只有在所有任务完成后 wait() 才会返回。

我们可以通过以秒为单位的“超时”参数指定我们愿意等待给定条件的时间。

如果在满足条件之前超时到期,则返回任务元组以及当时满足条件的任何任务子集,例如如果等待所有任务完成,则完成的任务子集。

...# wait for all tasks to complete with a timeoutdone, pending = await asyncio.wait(tasks, timeout=3)

如果在满足条件之前达到超时,则不会引发异常并且不会取消剩余任务。

现在我们知道如何使用 asyncio.wait() 函数,让我们看一些有效的例子。

3. 等待所有任务的示例

我们可以探索如何使用 asyncio.wait() 等待所有任务。在这个例子中,我们将定义一个简单的任务协程,它生成一个随机值,休眠几分之一秒,然后用生成的值报告一条消息。

然后,主协程将与协程一起在列表理解中创建许多任务,然后等待所有任务完成。

# SuperFastPython.com# example of waiting for all tasks to completefrom random import randomimport asyncio# coroutine to execute in a new taskasync def task_coro(arg):    # generate a random value between 0 and 1    value = random()    # block for a moment    await asyncio.sleep(value)    # report the value    print(f'>task {arg} done with {value}')# main coroutineasync def main():    # create many tasks    tasks = [asyncio.create_task(task_coro(i)) for i in range(10)]    # wait for all tasks to complete    done,pending = await asyncio.wait(tasks)    # report results    print('All done')# start the asyncio programasyncio.run(main())

运行示例首先创建 main() 协程并将其用作 asyncio 程序的入口点。

然后 main() 协程在列表理解中创建一个包含十个任务的列表,每个任务提供一个从 0 到 9 的唯一整数参数。

然后 main() 协程被挂起并等待所有任务完成。任务执行。每个生成一个随机值,休眠片刻,然后报告其生成的值。

所有任务完成后,main() 协程恢复并报告最终消息。这个例子强调了我们如何使用 wait() 函数来等待一组任务完成。

这可能是该函数最常见的用法。请注意,由于使用了随机数,每次运行程序时结果都会不同。

>task 5 done with 0.0591009105682192
>task 8 done with 0.10453715687017351
>task 0 done with 0.15462838864295925
>task 6 done with 0.4103492027393125
>task 9 done with 0.45567100006991623
>task 2 done with 0.6984682905809402
>task 7 done with 0.7785363531316224
>task 3 done with 0.827386088873161
>task 4 done with 0.9481344994700972
>task 1 done with 0.9577302665040541
All done

以上就是“Python异步等待任务怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。

--结束END--

本文标题: Python异步等待任务怎么使用

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python异步等待任务怎么使用
    今天小编给大家分享一下Python异步等待任务怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正文我们可以通过 asy...
    99+
    2023-07-05
  • Python 异步等待任务集合
    目录正文1. 什么是 asyncio.wait()2. 如何使用 asyncio.wait()3. 等待所有任务的示例正文 我们可以通过 asyncio.wait() 函数等待异步...
    99+
    2023-03-22
    Python 异步等待任务集合 Python 异步等待
  • Python异步怎么使用等待有时间限制协程
    本文小编为大家详细介绍“Python异步怎么使用等待有时间限制协程”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python异步怎么使用等待有时间限制协程”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。我们可以使...
    99+
    2023-07-05
  • 怎么在Javascript中实现异步等待
    本篇文章给大家分享的是有关怎么在Javascript中实现异步等待,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。async/await 是javascript中的一种模式,可使...
    99+
    2023-06-15
  • Python 异步如何使用等待有时间限制协程
    目录正文1. 什么是 Asyncio wait_for()2. 如何使用 Asyncio wait_for()3. 带有超时的 Asyncio wait_for() 示例正文 我们...
    99+
    2023-03-22
    Python 异步时间限制协程 Python 异步协程等待
  • python异步任务怎么实现
    在Python中,可以使用协程(Coroutine)和异步IO来实现异步任务。首先,需要使用`async`关键字定义一个协程函数(C...
    99+
    2023-09-22
    python
  • java接口异步不等待问题怎么解决
    在Java中,可以使用多线程和回调函数来解决接口异步不等待的问题。 一种常见的解决方法是使用线程池和Future对象。首先,将接口的...
    99+
    2023-10-24
    java
  • golang异步任务怎么调用
    在Go语言中,可以使用goroutine和channel来实现异步任务的调用。首先,创建一个需要异步执行的函数,使用`go`关键字加...
    99+
    2023-08-23
    golang
  • C# 中使用迭代器等待任务的操作是怎样的
    这篇文章将为大家详细讲解有关C# 中使用迭代器等待任务的操作方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。可能你已经阅读 C#5  关于 async 和&n...
    99+
    2023-06-17
  • Springboot任务之异步任务的使用详解
    02: 定时任务 03: 邮件任务 一、SpringBoot--异步任务  1.1 什么是同步和异步 同步是阻塞模式,异步是非阻塞模式。 同步就是指一个进...
    99+
    2024-04-02
  • SpringBoot2如何使用定时任务和异步任务
    这篇文章给大家分享的是有关SpringBoot2如何使用定时任务和异步任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、定时任务1、基本概念按照指定时间执行的程序。2、使用场景数据分析数据清理系统服务监控二、...
    99+
    2023-06-02
  • Python中怎么创建和运行异步任务
    1. 什么是异步任务异步任务是一个调度并独立运行 asyncio 协程的对象。它提供了一个调度协程的句柄,asyncio 程序可以查询并使用它来与协程交互。任务是从协程创建的。它需要一个协程对象,包装协程,安排它执行,并提供与之交互的方法。...
    99+
    2023-05-14
    Python
  • Django怎么实现异步任务
    本篇内容介绍了“Django怎么实现异步任务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 对于网站来说...
    99+
    2024-04-02
  • springboot怎么实现异步任务
    这篇“springboot怎么实现异步任务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot怎么实现异步任务...
    99+
    2023-06-29
  • android异步任务怎么实现
    在Android中,可以使用AsyncTask类来实现异步任务。下面是一个简单的示例:1. 创建一个继承自AsyncTask的子类,...
    99+
    2023-08-18
    android
  • 怎么使用Java多线程Future获取异步任务
    本篇内容主要讲解“怎么使用Java多线程Future获取异步任务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java多线程Future获取异步任务”吧!Runnable的局限性在前文中...
    99+
    2023-07-05
  • springboot定时任务和异步任务怎么实现
    这篇文章主要介绍“springboot定时任务和异步任务怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot定时任务和异步任务怎么实现”文章能帮助大家解决问题。异步任务简单案例...
    99+
    2023-06-27
  • Python异步之怎么保护任务免于取消
    这篇文章主要讲解了“Python异步之怎么保护任务免于取消”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python异步之怎么保护任务免于取消”吧!Asyncio 任务可以通过调用它们的 c...
    99+
    2023-07-05
  • Python异步方法怎么使用
    本篇内容介绍了“Python异步方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么要异步编程...
    99+
    2024-04-02
  • JavaScript事件循环同步任务与异步任务怎么实现
    这篇文章主要介绍“JavaScript事件循环同步任务与异步任务怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript事件循环同步任务与异步任务...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作