Python下篇 3. 异步编程生态

向量数据库大模型NoSQL数据库
Python下篇
  1. 异步编程生态

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. 小结

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

6. 关注公众号

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
vivo 容器化平台架构与核心能力建设实践
为了实现规模化降本提效的目标,vivo 确定了基于云原生理念构建容器化生态的目标。在容器化生态发展过程中,平台架构不断演进,并针对业务的痛点和诉求,持续完善容器化能力矩阵。本次演讲将会介绍 vivo 容器化平台及主要子系统的架构设计,并分享重点建设的容器化核心能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论