python中asyncio异步编程学习

Python中的asyncio(异步I/O)是一种高效的编程方式,可以极大地提高程序的并发能力。下面是python中asyncio异步编程学习的完整攻略:

1. 了解异步编程的概念和特点

异步编程是一种非阻塞的编程方式,与传统的同步阻塞编程方式不同。它可以在同一线程上运行多个任务,并且允许一个任务在等待某些操作完成时执行其他任务,从而最大程度地发挥计算资源的利用效率。Python官方自3.5版本起,默认提供了对asyncio的支持。

异步编程的特点:

  1. 响应更快:在网络通信等I/O密集型任务中,等待网络数据传输或磁盘读取的时间可能会很长,使用异步编程可以让执行流转向等待时间更少的任务,从而能够更快地执行程序。

  2. 提高并发:在多任务执行时,异步编程可以利用同一线程运行多个协程,分别处理各自的任务。

2. asyncio常用的函数及使用

在使用asyncio时,我们需要使用一些函数来控制协程的执行和等待,以下是是常用的几个函数。

  1. async def 特殊的声明:使用async声明的函数可以被视为coroutine对象,存在于协程对象之中。await语句能够在协程中挂起当前协程,等待另一协程完成后继续执行。

  2. asyncio.create_task(func, args, *kwargs):创建并且调度一个协程任务,返回一个Task对象。

  3. asyncio.gather(aws, loop=None, *kw):并行运行多个协程,并在所有协程结束时返回一个由所有协程返回值组成的列表。

下面是一个示例代码,演示利用asyncio来进行多任务异步并发请求:

import random
import asyncio
import aiohttp

async def get(session, url):
    async with session.get(url) as response:
        return await response.text()

async def fetch(urls):
    async with aiohttp.ClientSession() as session:
        tasks = []
        for url in urls:
            tasks.append(asyncio.create_task(get(session, url)))
        gathered = await asyncio.gather(*tasks)
        print(gathered)

urls = [f'http://example.com/api/{x}' for x in range(5)]
asyncio.run(fetch(urls))

以上代码中,我们使用async def声明了get函数,使用了aiohttp模块来发出异步请求,fetch函数创建了多个task对象并汇总等待执行结果。

3. asyncio中的同步代码

在日常编程中,依然有大量场景需要同步处理,此时我们可以使用asyncio.create_task方法把一个同步函数包装成协程进行使用。下面是一个示例代码,演示asyncio中如何调用同步函数:

import asyncio

def sync_hello():
    return "Hello, World!"

async def async_hello():
    # asyncio.ensure_future方法等价于asyncio.create_task方法,将同步函数包装成协程执行
    result = await asyncio.ensure_future(sync_hello())
    print(result)

asyncio.run(async_hello())

在以上代码中,我们通过使用asyncio.ensure_future方法来包装同步函数,使其能够在协程中使用。此外,在协程中我们使用了await关键字来等待同步函数执行的结果,从而获得了同步代码在异步程序中的使用方式。

以上就是Python中asyncio异步编程的完整攻略,包含异步编程的概念、特点,以及用法示例,希望可以帮助到大家。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中asyncio异步编程学习 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python中单个函数连续执行之间的时间

    【问题标题】:Time between consecutive executions of a single function in PythonPython中单个函数连续执行之间的时间 【发布时间】:2023-04-04 10:01:01 【问题描述】: 抱歉,如果问题有点含糊,我会在必要时对其进行编辑。 我正在使用 Tkinter 在 Python 中创…

    Python开发 2023年4月6日
    00
  • Python Numpy:找到list中的np.nan值方法

    以下是关于“Python Numpy: 找到list中的np.nan值方法”的完整攻略: Numpy中的np.nan 在Numpy中,np.nan表示“Not a Number”,即非数字。np.nan通常用于表示缺失值或无效值。以下是Numpy中np.nan的示例: import numpy as np # 创建包含np.nan的数组 a = np.arr…

    python 2023年5月13日
    00
  • Python组合数据类型详解

    Python组合数据类型详解 Python是一种非常灵活的编程语言,支持多种数据类型,其中包括组合数据类型,这些类型能够将多个数据结构组合成一个整体。在Python中,组合数据类型主要包括列表、元组和字典三种类型。 列表 列表是Python中最常用的组合类型,可以存储一组任意类型的值,包括数字、字符串和其他列表等。创建列表时,将要存储的值以逗号分隔,并用方括…

    python 2023年5月13日
    00
  • python 读写、创建 文件的方法(必看)

    Python 读写、创建文件的方法 在 Python 中,可以使用内置的文本处理库来进行文件的读取、写入和创建操作。下面介绍一些常用的方法: 打开文件 使用内置函数 open() 可以打开指定路径下的文件。open() 函数有两个参数:文件名(包含路径)和打开模式。打开模式有以下几种: r 读取模式,打开文件后只能读取文件内容,不能修改。 w 写入模式,会清…

    python 2023年6月2日
    00
  • python 读写txt文件 json文件的实现方法

    首先需要了解python内置的open()函数,该函数可以接受的参数如下: open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 其中file为文件路径,mode为打开文件的方式,具体的选项为: r: 以只…

    python 2023年6月3日
    00
  • 在Python中生成Chebyshev多项式的Vandermonde矩阵

    生成Chebyshev多项式的Vandermonde矩阵是一个比较常见的应用。在Python中生成Chebyshev多项式的Vandermonde矩阵的步骤如下: 导入NumPy库 首先需要导入NumPy库,这个库提供了在Python中进行科学计算的基础工具。可以使用以下代码导入NumPy库: import numpy as np 生成Chebyshev多项…

    python-answer 2023年3月25日
    00
  • 对python中使用requests模块参数编码的不同处理方法

    以下是关于Python中使用requests模块参数编码的不同处理方法的攻略: 对Python中使用requests模块参数编码的不同处理方法 在Python中,requests是一个流行的HTTP库,可以用于向Web发送HTTP请求和接响应。在使用requests库发送HTTP请求时,有时需要对参数进行编码处理。以下是对Python中使用requests模…

    python 2023年5月14日
    00
  • mac 安装python网络请求包requests方法

    以下是关于在Mac上安装Python网络请求包requests方法的攻略: 在Mac上安装Python网络请求包requests方法 在Mac上安装Python网络请求包requests方法非常简单,可以使用pip命令进行安装。以下是在Mac上安装Python网络请求包requests方法的攻略。 安装pip 在Mac上安装Python网络请求包reques…

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