官方网站是这么介绍Gevent:
简单翻译过來就是:一个基于协程的Python网络库依赖于的使用greenlet提供高级同步API。
这段话简单描述了gevent的架构实现和技术不过初学者看了还是一脸茫然。我能想到的能最快让人理解的定义是:
gevent给了你线程,但是没有使用线程
为什么不使用线程呢线程最大的缺点对我来说就是相比较greenlets(使用在gevent中的类線程的抽象概念)来说它会占用大量资源。 例如:这个模拟helloworld webserver的小程序下面是没有使用任何并发的代码:
也许用线程会更好,那么用threads函数替換sequential函数:
我们看到总共花时不到0.012秒
为什么不要一直在gevent中greenlet?主要Greenlets使用协助式多任务而线程使用抢占式多任务,意味着一个greenlet永远不会停止執行来让给另外的greenlet执行除非它使用确切的'yielding'函数(像:gevent.socket.socket.recv或gevent.sleep),而线程完全是基于操作系统决定线程之间的切换的
如果你使用python一段时间了,你应該听说过关于全局解释锁(GIL)它只允许在同一时刻单个线程执行python字节码。所以尽管在python中有线程和并发但是线程所提供的好处不及C或者Java。
希朢在学习gevent时我能给你一些兴趣gevent中还包括:
原文链接:,转载请注明来自!