gevent:
有猴子补丁,可以替代多线程,Python2.7以上版本可以稳定使用。
asyncio:
Python3.4以后版本出的标准库。利用yield from和coroutine装饰器来实现。本质是生成器回调的方式。Python3.5版本中改为了async和await的方式。与之相伴的是selector的出现,根据不同的平台选取相应的多路复用IO模型,如epoll、kqueue等。
tornado:
tornado自己实现了一套异步模块,个人感觉跟asyncio原理差不多,主要使用tornado.gen中的方法。
对个人要求
asyncio和tornado.gen异步的实现对程序员的个人能力要求较高,而gevent配合着flask使用可以做到写的代码跟同步是一个样子的,所以对程序员的要求较低。
asyncio和tornado的代码还没仔细研究,大概的是使用事件驱动的方式来实现异步的,都有一个event_loop。基本上都是通过某种方法把阻塞的地方yield出来,然后再send回去来完成异步的。
下面这条链接是个很好的Python的同步异步入门Tutorial for coroutine and concurrency
这篇文章里概括地讲解了asyncio的实现机制Python 标准库 18.5 - asyncio
简单的记录一下,以后会详细研究。