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 map()处理多个序列

    Python中的map()函数可以用于对多个序列进行处理,其基本语法如下: map(function, iterable, …) 其中,function参数表示对序列进行操作的函数,iterable参数表示一个或多个序列(多于一个序列时需要在函数中使用对应数量的参数),返回值为一个迭代器对象,可以使用list()等函数将结果转换为列表。 下面就来看两个示…

    python-answer 2023年3月25日
    00
  • Python的time模块中的常用方法整理

    Python的time模块中的常用方法整理 在Python中,time模块是处理时间和日期的必备模块,它包含了许多函数和类,能够获取当前时间、休眠程序、格式化日期、计算时间差等功能。下面我们来逐一介绍一下time模块中的常用方法。 1. 获取当前时间 使用time模块的time()函数可以获取当前时间戳,又称为Unix时间戳。它是指从1970年1月1日零时零…

    python 2023年6月2日
    00
  • Python 中类的构造方法 __New__的妙用

    Python中类的构造方法__new__的妙用 在Python中,类的构造方法__new__是一个非常重要的方法,它在对象创建之前被调用,用于创建并返回一个新的对象实例。本文将详细介绍__new方法的妙用,包括何使用__new__方法实现单例模式、如何使用__new__方法实现对象池等。 什么是__new__方法 在Python中类的构造方法__new__是…

    python 2023年5月14日
    00
  • python持久化存储文件操作方法

    下面是关于Python持久化存储文件操作方法的完整攻略: 1. 什么是Python持久化存储? Python持久化存储是指将Python程序中的数据(如变量、对象、数据结构等)保存到本地磁盘或其它外部存储设备,以便下次程序运行时能够重新读取这些数据。这可以方便用户保存或共享程序中的数据,也可以加快程序运行速度。 在Python中,常用的持久化存储方法包括:文…

    python 2023年6月2日
    00
  • python实现一个简单的ping工具方法

    当我们需要测试网络连通性时,通常可以使用ping命令来测试。但有时我们需要在python程序中实现ping命令的功能。下面是一个简单的实现方法。 使用第三方库ping3 在Python中,有一个名为ping3的第三方库,可以用于模拟ping命令的功能。使用该库的示例如下: import ping3 response_time = ping3.ping(‘ww…

    python 2023年5月19日
    00
  • python使用beautifulsoup从爱奇艺网抓取视频播放

    Python使用BeautifulSoup从爱奇艺网抓取视频播放 在本文中,我们将介绍如何使用Python和BeautifulSoup库从爱奇艺网抓取视频播放。我们将提供两个示例,演示如何获取视频标题和视频播放链接。 安装BeautifulSoup库 在使用BeautifulSoup库之前,我们需要先安装它。可以使用pip命令来安装BeautifulSoup…

    python 2023年5月15日
    00
  • python爬虫实战之爬取京东商城实例教程

    Python爬虫实战之爬取京东商城实例教程 爬虫框架的选择 在进行爬虫开发之前,我们需要选择一个适合自己的爬虫框架。常见的爬虫框架有Scrapy、BeautifulSoup、Selenium等。对于爬取京东商城这样的电商网站,我建议使用Scrapy框架,因为它可自动化流程,且可以轻松地应用在大型爬虫项目中。 准备工作 在进行爬虫开发之前,我们需要确定要爬取的…

    python 2023年5月14日
    00
  • Python实现简易过滤删除数字的方法小结

    下面是详细的攻略: Python实现简易过滤删除数字的方法小结 在Python中,我们可以使用多种方法来过滤或删除字符串中的数字。本文将介绍两种常用的方法,分别是使用正则表达式和使用列表推导式。 方法一:使用正则表达式过滤删除数字 在Python中,我们可以使用正则表达式来过滤或删除字符串中的数字。下面是使用正则表达式过滤删除数字的示例代码: import …

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