python中asyncio异步编程学习

yizhihongxing

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操作手机app的实现步骤

    要实现Python操作手机App的功能,需要按以下步骤进行: 安装Appium及其依赖 Appium是一个用于自动化移动应用程序测试的工具,支持iOS和Android平台。为了使用Python操作手机App,需要在电脑上安装Appium及其相关依赖。具体步骤可以参考Appium官方文档。 连接手机并开启USB调试 在操作手机App之前,必须将手机连接到电脑,…

    python 2023年6月2日
    00
  • Python应用库大全总结

    Python应用库大全总结 Python是一种功能强大的编程语言,拥有丰富的应用库,可以帮助我们快速开发各种应用程序。本攻略将介绍一些常用的Python应用库,以及它们的用途和示例。 NumPy NumPy是Python中用于科学计算的基础库之一。它提供了高性能的多维数组对象,以及用于处理这些数组的工具。NumPy可以用于数学、科学、工程和数据分析等领域。 …

    python 2023年5月15日
    00
  • 批量获取及验证HTTP代理的Python脚本

    在本攻略中,我们将介绍如何使用Python批量获取及验证HTTP代理。以下是一个完整攻略,包括两个示例。 步骤1:获取代理列表 首先,需要获取代理列表。我们可以使用requests库来获取代理列表,并使用正则表达式来提取代理IP和端口号。 以下是示例代码,演示如何使用Python获取代理列表: import re import requests # 获取代理…

    python 2023年5月15日
    00
  • 跟老齐学Python之画圈还不简单吗?

    跟老齐学Python之画圈还不简单吗? 1. 前言 在学习Python的过程中,绘制图形是一个非常有趣的方向。本篇文章介绍了如何使用Python的turtle模块绘制圆。 2. turtle模块 turtle是Python标准库中的一个模块,提供了一个良好的绘图环境。它提供了一组简单的命令,用于控制海龟绘图窗口中的小海龟。turtle模块可以绘制很多图形,包…

    python 2023年5月19日
    00
  • python制作爬虫并将抓取结果保存到excel中

    下面是详细讲解“Python 制作爬虫并将抓取结果保存到 Excel 中”的完整实例教程。 一、准备工作 为了写这个示例,我们需要安装一些 Python 的库: requests:用于请求网页的库 BeautifulSoup:用于解析网页 HTML 的库 pandas:用于操作 Excel 文件的库 可以使用 pip 安装这些库: pip install r…

    python 2023年5月14日
    00
  • 跟老齐学Python之开始真正编程

    跟老齐学Python之开始真正编程 1. 背景介绍 本攻略是针对初学者的Python入门编程指南,旨在引导初学者开始真正编写Python代码。在学习本攻略之前,读者应该已经掌握了Python的基本语法和语言规范。 2. 开始编程 2.1 建立项目目录结构 在开始编程之前,建立一个清晰的项目目录结构对于之后的开发将非常重要。建议结构如下: project_na…

    python 2023年5月30日
    00
  • Pycharm如何对python文件进行打包

    当我们编写好一个 Python 应用程序后,有时候我们希望将其发布到其他机器上,此时打包就成为非常必要的一个环节。PyCharm 集成了一些打包工具,可以方便的打包 Python 应用程序。下面,我将详细介绍如何使用 PyCharm 对 Python 文件进行打包。 1. 新建PyCharm项目 在 PyCharm 中新建一个 Python 项目并添加需要打…

    python 2023年6月3日
    00
  • Python之读取TXT文件的方法小结

    “Python之读取TXT文件的方法小结”是一篇介绍如何在Python中读取TXT文件的文章,下面我们会详细讲解这篇文章的内容。 需要掌握的知识点 在开始介绍如何读取TXT文件之前,我们需要掌握一些基本的知识点。 文件路径 在Python中,我们需要指定要读取的文件的路径。常见的文件路径有两种: 绝对路径:从电脑根目录开始的完整路径。 相对路径:从当前文件所…

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