网络-Python-Gevent
之前在写爬虫的时候有接触过gevent,现在来系统学习一下。
简介
Gevent也是基于协程(coroutine)实现的Python网络库,使用轻量级Greenlet作为执行单元,底层是libevent。 gevent和eventlet比较接近,唯一不同的是eventlet自己实现的事件驱动,gevent使用的是libev。 所有的Greenlet会被组织成一棵树,树根是一个叫hub的主循环协程,确定了个Greelet的逻辑关系。 我们会发现每次从hub切换到一个greenlet后,都会回到hub,这就是gevent的关键。
为什么每次要切换回hub?
- hub是事件驱动的核心,每次切换到hub后将继续循环事件。如果在一个greenlet中不出来,那么其它greenlet将得不到调用。
- 维持两者关系肯定比维持多个关系简单。每次我们所关心的就是hub以及当前greenlet,不需要考虑各个greenlet之间关系。