网络-Python-Gevent

之前在写爬虫的时候有接触过gevent,现在来系统学习一下。

简介

Gevent也是基于协程(coroutine)实现的Python网络库,使用轻量级Greenlet作为执行单元,底层是libevent。 gevent和eventlet比较接近,唯一不同的是eventlet自己实现的事件驱动,gevent使用的是libev。 所有的Greenlet会被组织成一棵树,树根是一个叫hub的主循环协程,确定了个Greelet的逻辑关系。 我们会发现每次从hub切换到一个greenlet后,都会回到hub,这就是gevent的关键。

为什么每次要切换回hub?

  1. hub是事件驱动的核心,每次切换到hub后将继续循环事件。如果在一个greenlet中不出来,那么其它greenlet将得不到调用。
  2. 维持两者关系肯定比维持多个关系简单。每次我们所关心的就是hub以及当前greenlet,不需要考虑各个greenlet之间关系。

reference

  1. 浅谈 Gevent 与 Tornado(转)
Table of Contents