Python下篇 3. 异步编程生态

简介: 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. 小结



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

相关文章
|
数据采集 数据库 开发者
利用Python asyncio实现高效异步编程
利用Python asyncio实现高效异步编程
438 100
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
758 2
|
数据采集 数据安全/隐私保护 开发者
非阻塞 I/O:异步编程提升 Python 应用速度
非阻塞 I/O:异步编程提升 Python 应用速度
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
605 5
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
API 调度 开发者
探索Python中的异步编程:从asyncio到Trio
本文将带你深入Python异步编程的心脏地带,从asyncio的基本概念到Trio的高级特性,我们将一起揭开Python异步编程的神秘面纱,并探讨它们如何改变我们的编程方式。
|
API 开发者 Python
探索Python中的异步编程:Asyncio与Tornado的对决
在这个快节奏的世界里,Python开发者面临着一个挑战:如何让代码跑得更快?本文将带你走进Python异步编程的两大阵营——Asyncio和Tornado,探讨它们如何帮助我们提升性能,以及在实际应用中如何选择。我们将通过一场虚拟的“对决”,比较这两个框架的性能和易用性,让你在异步编程的战场上做出明智的选择。
|
并行计算 调度 开发者
探索Python中的异步编程:从基础到实战
在Python的世界里,异步编程是一种让程序运行更加高效、响应更快的技术。本文不仅会介绍异步编程的基本概念和原理,还将通过具体代码示例展示如何在Python中实现异步操作。无论你是初学者还是有经验的开发者,都能从中获益,了解如何运用这一技术优化你的项目。

推荐镜像

更多