Python下篇 3. 异步编程生态

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: Python下篇 3. 异步编程生态

1. 前言



协程中不能写阻塞的代码因为异步编程遵旨就是要异步,所有的都要异步,所以就不能使用阻塞的代码和库,如requests, pymysql等,非得使用也可以,异步+多线程的方式仍然有效(在前面文章中讲解过了)。但是我们都希望所有的代码都可以使用异步完成,这就促使开发者必须基于异步去改造或者创造新的库或者框架等,目前异步编程生态圈正在逐步完善,我们完全可以使用它们。


2. 异步web框架



  1. Tornado

Tornado在2009年发布,从一开始就提供有异步编程的功能。Tornado不仅仅是Web框架,同时它内置了很多异步模块,可用于自己构建异步应用。这些模块包括:

  • 协同程序和其他原语(tornado.gen,tornado.locks,tornado.queues等)
  • 网络模块(tornado.ioloop,tornado.iostream等)
  • 异步服务器和客户端(tornado.httpserver,tornado.httpclient等)

通过这些模块,Tornado构建了自己的异步Web框架模块。


  1. FastAPI

FastAPI似乎是异步Python框架里功能、文档最丰富的框架。它语法简单,自动生成API文档,而且性能在某些情况下可以与Go相匹配。总而言之,我真的有一种感觉,FastAPI将成为Python的顶级异步框架。


  1. Sanic

Sanic只支持3.6以上Python版本,支持通用的async/await语法,开箱即用,因此你无需阅读大量文档就可以写出你的一个HTTP处理器。

Sanic可以说是Python世界中最流行和最受欢迎的异步框架。它具有你项目中需要的所有功能:路由,中间件,Cookie,版本控制,蓝图,基于类的视图,静态文件,流,sockets,此外你还可以集成模板,数据库驱动,文件I / O,队列等等。


3. 异步库



  1. Aiohttp

Aiohttp是基于python和asyncio的客户端/服务端异步网络请求库,对应于同步网络请求库是requests,所以在异步编程中想要请求网络接口,那么必须使用异步网络库,而Aiohttp是首选的。


  1. Aiomysql

Aiomysql是基于python和asyncio的异步mysql客户端库,它依赖并重用Pymysql大量功能,所以你可以在异步编程中像使用同步编程的方式编写异步代码。


  1. Aioredis

Aioredis是基于Python和asyncio的异步redis客户端库,里面也是复用大量redis的操作,所以在创建redis pool的时候一定要用异步的方式去创建。


4. 异步IO



  1. gevent

greenlet + libevent(后来是libev或libuv)。通过协程(greenlet)和事件循环库(libev,libuv)实现的gevent使用很广泛。


  1. twisted

是事件驱动的网络库。


  1. asyncio

Python3.4加入了asyncio库,使得Python有了支持异步IO的官方库。这个库,底层是事件循环(EventLoop),上层是协程和任务。asyncio自从3.4版本加入到最新的3.7版一直在改进中。


  1. async/await

Python3.5引入了两个新的关键字await和async用来替换@asyncio.coroutine和yield from,从语言本身来支持异步IO。从而使得异步编程更加简洁,并和普通的生成器区别开来。


  1. uvloop

uvloop是用Cython写的,基于libuv这个C语言实现的高性能异步I/O库。asyncio自己的事件循环是用Python写的,用uvloop替换asyncio的事件循环让异步程序运行速度更快,并且使用也相当简洁。


5. 小结



以上所有异步知识没必要都深入了解,只需要关心自己需要用到的就可以了,因为技术在不断更迭,等你花时间都掌握了之后,这个时候如果一旦出现新的技术可以替代老技术的时候,那么你之前积累的将会无用武之地,所以按照需要学习,把时间花在底层和长期技术投资上,这样不管后来技术如何变迁,透过表象看本质都是一样的。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
12天前
|
搜索推荐 程序员 调度
精通Python异步编程:利用Asyncio与Aiohttp构建高效网络应用
【10月更文挑战第5天】随着互联网技术的快速发展,用户对于网络应用的响应速度和服务质量提出了越来越高的要求。为了构建能够处理高并发请求、提供快速响应时间的应用程序,开发者们需要掌握高效的编程技术和框架。在Python语言中,`asyncio` 和 `aiohttp` 是两个非常强大的库,它们可以帮助我们编写出既简洁又高效的异步网络应用。
61 1
|
18天前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
26 0
|
1天前
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
|
5天前
|
调度 开发者 Python
异步编程在Python中的应用:Asyncio和Coroutines
【10月更文挑战第12天】本文介绍了Python中的异步编程,重点讲解了`asyncio`模块和协程的概念、原理及使用方法。通过异步编程,程序可以在等待I/O操作时继续执行其他任务,提高整体效率。文章还提供了一个简单的HTTP服务器示例,展示了如何使用`asyncio`和协程编写高效的异步代码。
12 2
|
7天前
|
调度 开发者 Python
异步编程在Python中的应用:Asyncio和Coroutines
【10月更文挑战第10天】本文介绍了Python中异步编程的应用,重点讲解了`asyncio`模块和协程的概念、原理及使用方法。通过一个简单的HTTP服务器示例,展示了如何利用`asyncio`和协程实现高效的并发处理。
14 1
|
8天前
|
调度 开发者 Python
探索Python中的异步编程:从基础到实战
【10月更文挑战第9天】在Python的世界中,异步编程是一个让开发者既能提升应用性能又能保持代码可读性的强大工具。本文将带你一探究竟,从理解异步编程的基本概念开始,到深入剖析其背后的原理,再到通过实际代码示例掌握其应用技巧。无论你是异步编程的新手还是希望深化理解的老手,这篇文章都将为你打开一扇新的大门,让你的项目因使用异步而更加高效和强大。
|
11天前
|
调度 开发者 Python
异步编程在Python中的应用:Asyncio和Coroutines
【10月更文挑战第6天】本文介绍了Python中的异步编程,重点讲解了`asyncio`模块和协程的概念、原理及使用方法。通过示例展示了如何利用`asyncio`和协程编写高效的异步代码,提高程序的性能和响应能力。
15 2
|
11天前
|
调度 开发者 Python
探索Python中的异步编程:从asyncio到Trio
在这个快节奏的技术世界里,Python的异步编程正变得越来越重要。本文将带你深入Python的异步编程世界,从asyncio的基础用法,到Trio的高级特性,我们将一探究竟。准备好,让我们一起揭开Python异步编程的神秘面纱。
|
18天前
|
中间件 API 调度
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
14 4
|
17天前
|
程序员 开发者 Python
探索Python中的异步编程:从基础到实战
本文旨在通过浅显易懂的语言和实际代码示例,引导读者了解并掌握Python中的异步编程。我们将从异步编程的基本概念入手,逐步深入到其背后的原理,最后通过一个实战项目来巩固所学知识。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你开启Python异步编程的大门,让你的代码运行得更加高效。