Python Asyncio库之asyncio.task常用函数详解

Python中的Asyncio库是用于异步编程的标准库,可以优化程序性能和效率。其中Asyncio.task是Asyncio重要组成部分,它负责任务调度和协程管理。以下是Asyncio.task常用函数的详解:

asyncio.task常用函数

asyncio.ensure_future(coro_or_future, *, loop=None)

将协程或者Future对象转化成一个Task对象,如果传入的已经是一个Task对象,则原样返回

asyncio.gather(*coros_or_futures, loop=None, return_exceptions=False):

等待多个协程或者Future对象全部完成,如果全部完成,则将每个协程返回的结果包装成list返回,如果设置了return_exceptions为True,则有异常也按照顺序返回一个列表

以下是示例:

import asyncio

async def coro1():
    await asyncio.sleep(1)
    return 1

async def coro2():
    await asyncio.sleep(2)
    return 2

async def main():
    result = await asyncio.gather(coro1(), coro2(), loop=asyncio.get_event_loop())
    print(result)

asyncio.run(main())

输出结果为:[1, 2]

asyncio.wait(tasks, *, loop=None, timeout=None, return_when=ALL_COMPLETED):

等待传入的任务(task)完成,tasks可以是Future对象、Task对象或者协程。如果所有任务都完成,则返回一个集合(set),其中包含每个任务的状态(state)、结果(result)和异常(exception)。如果设置了timeout,则在指定的时间内返回结果,不管任务是否完成。return_when参数用于指定何时函数应该返回,默认为ALL_COMPLETED,意味着当所有的任务都完成时才返回。

以下是示例:

import asyncio

async def coro1():
    await asyncio.sleep(1)
    print("coro1 finished")

async def coro2():
    await asyncio.sleep(2)
    print("coro2 finished")

async def main():
    tasks = [asyncio.create_task(coro1()), asyncio.create_task(coro2())]

    done, pending = await asyncio.wait(tasks, timeout=1)
    # done集合中包含已完成的任务,pending集合中包含未完成的任务

    print(f'done={done}, pending={pending}')
    # 此时输出 done=set(), pending={<Task coro1() running>, <Task coro2() running>}
    # 因为两个协程都没有在timeout时间内执行完

    done, pending = await asyncio.wait(tasks, timeout=3)
    print(f'done={done}, pending={pending}')
    # 此时输出 done={<Task coro2() finished>}, pending={<Task coro1() finished>}
    # 两个协程都执行完了,因此都在done集合中
    # 注意:done集合是集合(set),顺序是不确定的

asyncio.run(main())

输出结果为:

coro1 finished
coro2 finished
done=set(), pending={<Task coro1() running>, <Task coro2() running>}
coro1 finished
coro2 finished
done={<Task coro2() finished>}, pending={<Task coro1() finished>}

以上就是Asyncio.task常用函数的常见操作示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Asyncio库之asyncio.task常用函数详解 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • 基于Python代码实现Apriori 关联规则算法

    基于Python代码实现Apriori关联规则算法 本文将讲解如何使用Python语言实现Apriori关联规则算法。关联规则算法是数据挖掘中的一种常见应用,它用于寻找数据中的关联性,从而找到数据中的潜在关系和规律。Apriori 算法是一种经典的关联规则算法,本文将详细介绍其实现过程。 安装相关库 在开始实现 Apriori 算法之前,需要安装一些 Pyt…

    python 2023年6月5日
    00
  • 从底层简析Python程序的执行过程

    现在我来为你详细讲解“从底层简析Python程序的执行过程”的完整攻略。 1. Python程序的执行过程 Python程序的执行过程是一个相对复杂的过程,但是可以简单地分为以下三个步骤: 1.解释器对Python源代码进行词法分析和语法分析,生成抽象语法树(AST)。 2.解释器将AST转换为字节码,并进行优化。 3.解释器执行优化后的字节码,输出运行结果…

    python 2023年5月18日
    00
  • 5种Python统计次数方法技巧

    5种Python统计次数方法技巧 在Python中,统计次数是一种非常常见的操作,特别是在数据分析和机器学习领域。本文将介绍5种Python统计次数的方法技巧,分别是: 使用Python内置方法 使用collections模块的方法 使用numpy模块的方法 使用pandas模块的方法 使用Counter对象 接下来将详细介绍这5种方法的使用。 使用Pyth…

    python 2023年5月13日
    00
  • python爬虫之urllib,伪装,超时设置,异常处理的方法

    Python爬虫之urllib攻略 在Python中,我们可以利用urllib库来进行网页爬取。本篇攻略将介绍如何通过urllib库进行网页爬取的相关内容,包括伪装、超时设置和异常处理等。下面,将对每一部分进行详细讲解。 伪装 在进行网页爬取时,有些网站可能会检测到你的爬虫身份,并将你的IP地址封锁。为了规避这一问题,我们需要进行伪装操作。 import u…

    python 2023年5月13日
    00
  • Python实现对比两个Excel数据内容并标记出不同

    下面是Python实现对比两个Excel数据内容并标记出不同的完整实例教程。 实现思路 本文使用Python语言,利用pandas库读取Excel文件,并将数据转换为DataFrame数据结构。利用DataFrame提供的函数对两个Excel表格进行比对,找寻不同的内容,并在新的Excel表格中标记出不同的内容。 读取Excel文件,将数据转换为DataFr…

    python 2023年5月13日
    00
  • Python入门篇之文件

    Python入门篇之文件 在Python中,文件是操作和处理数据不可或缺的一部分。本篇文章将介绍Python中文件的基本操作,包括文件的打开、读取、写入和关闭等。 打开文件 在Python中,我们使用open()函数来打开一个文件。open()函数接收两个参数:文件名和模式(可选)。常见的模式包括’r’(读取模式,默认),’w’(写入模式)、’a’(追加模式…

    python 2023年6月2日
    00
  • Python批量发送post请求的实现代码

    在Python中,我们可以使用requests库来批量发送POST请求。POST请求是一种向服务器提交数据的HTTP请求方法,通常用于提交表单数据或上传文件。本文将通过实例讲解如何使用Python批量发送POST请求,包括使用requests库和两个示例。 使用requests库批量发送POST请求 我们可以使用requests库的post方法来批量发送PO…

    python 2023年5月15日
    00
  • python Timer 类使用介绍

    Python Timer 类使用介绍 计时器是一个用于测量时间间隔的工具。Python 的标准库提供了 Timer 类来方便我们进行时间相关的操作。本文将详细介绍 Timer 类的使用。 Timer 类的基本介绍 Python 的 Timer 类位于 threading 模块下,可以通过以下方式进行导入: from threading import Time…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部