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

yizhihongxing

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路径作为字符串[关闭]

    【问题标题】:Python path as a string [closed]Python路径作为字符串[关闭] 【发布时间】:2023-04-04 10:49:02 【问题描述】: 我使用this 模块 我有一个需要字符串的函数。我没有找到任何可以将总路径作为字符串提供给我的函数。 from path import * import paramiko if…

    Python开发 2023年4月6日
    00
  • Python3.6实现带有简单界面的有道翻译小程序

    Python3.6实现带有简单界面的有道翻译小程序攻略 概览 本篇攻略将会教你如何使用Python3.6实现一个带有简单界面的有道翻译小程序。这个小程序可以实现翻译英文单词或句子,输出对应的中文翻译结果。 准备工作 在编写代码之前,我们需要进行一些准备工作。首先,需要确保你的电脑上已经安装了Python3.6及以上版本。其次,需要确保已经安装了request…

    python 2023年5月23日
    00
  • python基础之set集合详解

    Python基础之set集合详解 Set是Python的一种基本数据类型,与列表(List)、元祖(Tuple)、字典(Dictionary)一样,它是一种可迭代的数据集合。其中的元素没有顺序,也没有重复的值,这些元素必须是可哈希的。 创建集合 可以使用以下方式来创建一个集合: # 创建一个空集合 empty_set = set() # 创建一个非空的集合 …

    python 2023年5月13日
    00
  • Python global全局变量函数详解

    Python global全局变量函数详解 在Python中,定义一个函数时,我们可以使用global关键字来声明一个全局变量。本文将详细介绍如何使用global来定义全局变量以及注意事项。 global语法 global语法的格式如下: global var_name 其中,var_name为想要声明为全局变量的变量名。 global的作用 使用globa…

    python 2023年5月19日
    00
  • Python初学者必备的文件读写指南

    Python初学者必备的文件读写指南 作为一名初学者,文件读写是最基础也是最常见的操作之一,但很多人可能并不清楚该如何读写文件,下面将为大家详细介绍Python中文件读写的操作。 文件的打开与关闭 在Python中打开一个文件需要用到内置函数open(),它的基本语法格式如下: open(file, mode=’r’, buffering=-1, encod…

    python 2023年5月13日
    00
  • Python周期任务神器之Schedule模块使用详解

    Python周期任务神器之Schedule模块使用详解 简介 Schedule是一个Python的定时任务库,可用于周期性地运行函数。它包含了简单的API,使得我们可以编写出精确的任务调度程序。Schedule模块基于时间的概念,从而可以在指定的时间执行一些任务,例如:定时监测网站可用性、定时发送邮件、定时运行爬虫等等。 安装 pip install sch…

    python 2023年6月6日
    00
  • 带有特殊字符的 Python 3.5 csv 解析

    【问题标题】:Python 3.5 csv parsing with special characters带有特殊字符的 Python 3.5 csv 解析 【发布时间】:2023-04-01 15:16:01 【问题描述】: 我有一个文件,我想将其解析为 csv。该文件是一个导出文件,并以以下格式(逐行,每个文件包含数千行)到达我这里: 03:30:30 …

    Python开发 2023年4月8日
    00
  • python 解决cv2绘制中文乱码问题

    针对Python解决cv2绘制中文乱码问题,最常用的方法是将中文字体文件放到指定目录下,代码中可以指定字体文件的路径。下面给出完整的攻略: 1. 下载中文字体文件 使用cv2绘图时,乱码问题主要是因为缺少合适的中文字体文件,所以我们需要下载中文字体文件解决这个问题。可以使用开源字体的中文字体文件进行下载,常用的比如“思源宋体”。 下载思源宋体的中文字体文件,…

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