Python多线程 vs gevent

之前一直没了解过gevent的知识,最近在研究Flask性能提升的时候看到了gevent,正好顺带了解一下。为什么不是Twisted?Twisted是依靠回调实现的异步,不是我喜欢的类型。

先做一个简单的性能测试:

a.py

b.py

执行结果如下:

$python a.py

by requests: 2.89695906639 seconds

by mutiRequests: 1.29679989815 seconds

by mutiUrllib2: 4.26026391983 seconds

$python b.py

by grequests: 1.18827795982 seconds

by gurllib2: 2.52291297913 seconds 看起来是有略微的requests请求提升了一点,这个原因大概是requests本身就对代码进行了大量有话导致的,但是看urllib2的话,实际上还是有一定的性能提升的。

gevent若是说缺点的话,目前我的感觉如下:

  • 基于libev/libevent实现,无法运行在Windows平台。相对来说,Twisted就是跨平台的;Windows版本可以点这里下载:gevent1.0
  • 虽然是Cypthon实现的,但是其实性能不见得比Tornado好一些;
  • Twisted相对内置了很多协议,gevent现在还是差一点;太多了的Twisted也是负担
  • gevent一直没有1.0的正式发布,老版本还是存在Bug的,现在只能用1.0rc。1.0发布了,小伙伴们快上吧!
comments powered by Disqus