异步Python学习笔记

Posted on Thu 08 December 2016 in Python

About

一般来说说到Python都会说这是一种十分低效的语言,慢等等,然而之前用Gevent做了一个restful,发现其实性能还不错。

其实Python很慢这一点当然是不错的,不适合直接用来作复杂算法的实现。但是当我们需要实现Web服务器等软件时, 性能的瓶颈实际并不在CPU上,多数时间我们都在等待IO,如果IO需要1s,这个时候你用Python实现一段代码运行需要0.01s, 和你用C实现一段代码运行需要0.0001s有什么可感知的区别吗?

所以最重要的是如何地让用户请求不阻塞,充分地让IO跑满。最早人们通过多进程来解决这个问题,后来发现进程实在是太笨重, 转而使用线程来解决这个问题,但是线程切换对于大量短时io依然过重。所以最后人们转而开始强调并发,不再强调并行, 也就是所谓的异步。 这就是为什么Python这样的有GIL存在的, 串行执行的语言,在web开发上依然能有一席之地的原因。所以要用Python高效的实现服务,良好地异步是必不可少的。

Python 3.4 新加了asyncio,一直很感兴趣,但是也没时间去深入研究。

最近在实验室需要做一个FTP,pyftpdlib是一个十分优秀的FTP服务器实现, 其本身的实现是基于异步的,同时也支持线程和进程模型。当然考虑到性能问题,最后肯定需要采用异步模型。 但是在这里我遇到了一个问题,pyftpdlib本身有自己的异步IO loop,如果强行上gevent的monkey_patch有可能导致各种奇怪的bug?

基于这个考虑 …


Continue reading