asyncio异步编程,你搞懂了吗?

基于async & await关键字的协程实现异步编程,这是Python异步编程的主流技术。接下来将详细讲解asyncio模块与async&await的关键概念。事件循环是异步编程的核心,它是一个while循环,周期性地运行并执行任务。通过事件循环可以获取和创建任务。编写程序时,可以通过代码获取并创建事件循环。协程函数定义形式为...
asyncio异步编程,你搞懂了吗?
协程与异步编程(asyncio)是一种通过一个线程实现代码块相互切换执行的技术。这与普通的函数执行顺序不同,协程允许在多个上下文中切换执行代码,从而实现更高效的程序运行。以下是协程的实现方式:

1.1 greenlet

greenlet是一个第三方模块,使用前需安装pip3 install greenlet。greenlet提供了协程的实现方式,允许在多个协程间切换执行。

1.2 yield

基于Python的生成器的yield和yield form关键字实现协程,其中yield form在Python3.3中引入,提供了一种简洁的方式来实现协程。

1.3 asyncio

Python3.4引入官方协程库asyncio,它是基于greenlet的更高级的实现,内部集成了遇到IO耗时操作自动切花的功能,提升了程序的执行效率。

1.4 async & awit

在Python3.5中,async与await关键字正式引入,简化了协程代码的编写,让程序更加易于理解与维护。

1.5 小结

目前,协程的主流实现方式是使用Python官方推荐的asyncio模块和async&await关键字,广泛应用于tonado、sanic、fastapi、django3等框架中。

协程的意义在于利用单线程实现多任务并发执行,特别适用于有IO操作的程序中,可以利用IO等待时间执行其他代码,提升程序执行效率。

例如在爬虫应用中,使用异步编程可以同时下载多个url_list中的图片,比同步编程更高效。因为基于异步编程的程序可以在IO等待时间执行其他任务。

基于async & await关键字的协程实现异步编程,这是Python异步编程的主流技术。接下来将详细讲解asyncio模块与async&await的关键概念。

事件循环是异步编程的核心,它是一个while循环,周期性地运行并执行任务。通过事件循环可以获取和创建任务。编写程序时,可以通过代码获取并创建事件循环。

协程函数定义形式为async def,返回协程对象。调用协程函数时,函数内部代码不会立即执行,而是返回一个协程对象。事件循环与协程对象配合执行协程内部代码。

await关键字用于在遇到IO操作时挂起当前协程,允许其他协程执行。示例展示了如何使用await挂起协程,让事件循环执行其他任务。

Task对象用于并发调度协程,通过asyncio.create_task(协程对象)创建Task,将协程加入事件循环等待执行。Task对象继承自Future对象,提供任务状态的追踪。

在程序中,使用asyncio.Future对象处理异步操作的最终结果,Future对象可以绑定函数,通过手动设置实现结果处理。异步迭代器和异步上下文管理器也是异步编程中支持的特性。

uvloop是asyncio的高性能事件循环替代方案,使用uvloop可以显著提升程序性能。在项目中替换asyncio的事件循环非常简单。知名asgi uvicorn框架内部使用uvloop事件循环。

实战案例包括异步操作Redis、MySQL和使用FastAPI框架。在这些场景中,异步编程通过并发处理请求,提升程序性能。

总结,异步编程通过协程技术实现了高效的并发执行,提供了更好的性能和资源利用。随着越来越多框架转向异步编程,其在现代开发中的应用变得越来越普遍。2024-11-04
mengvlog 阅读 9 次 更新于 2025-06-20 00:45:17 我来答关注问题0
  • 在程序中,使用asyncio.Future对象处理异步操作的最终结果,Future对象可以绑定函数,通过手动设置实现结果处理。异步迭代器和异步上下文管理器也是异步编程中支持的特性。uvloop是asyncio的高性能事件循环替代方案,使用uvloop可以显著提升程序性能。在项目中替换asyncio的事件循环非常简单。知名asgi uvicorn框架内部使...

  •  翡希信息咨询 一文带您了解Python中的并发:异步(Asyncio)和多线程(Multithreading)

    定义:异步编程是一种编程范式,允许程序在等待某些操作完成时,继续执行其他任务。实现方式:Python的asyncio模块自3.4版本引入,采用协程实现并发。它使用单线程的事件循环来管理异步任务。特点:异步编程适用于I/O密集型任务,能够减少阻塞,提高程序的整体效率。应用场景:当程序需要频繁进行I/O操作时,异...

  •  猪八戒网 快速带你搞懂python协程 (async await asyncio)

    这里可能有人会问, 为什么要用asyncio.sleep, 而不用time.sleep呢? 因为, await后面一个要跟一个future(一个异步函数的实例化对象), 可是time.sleep并不是异步函数, 也就不支持协程间切换, 就没法实现并发, 只能串行 importasyncioimporttime async def play_game(): """玩游戏""" print('start...

  • Python的异步编程库asyncio使用教程:1. 基础概念: 核心原理:Asyncio的核心是利用非阻塞I/O操作,通过事件循环来调度多个任务并发执行,从而提高资源利用率和系统并发处理能力。2. 编写异步代码: 协程函数:使用async def定义的函数为协程函数,它们不能直接运行,需要通过事件循环来管理。 await关键字:在...

  •  武汉誉祥科技 怎么掌握asyncio?

    最后,EventLoop是整个异步世界的大脑,它负责整个循环的调度。而Future则像神经元,连接着Coroutine和EventLoop,确保信息的准确传递。asyncio的设计简洁而直观,让你在编写异步代码时,感受如同编写同步代码般的舒适和高效。通过理解这些核心概念,你将能够熟练掌握asyncio,解锁异步编程的无限可能,让你的代码...

檬味博客在线解答立即免费咨询

编程相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部