Loocor' Blog

在Mac OSX上安装python的Gevent组件

修正记录

2012-11-06,更新格式;

2012-11-05,更新gevent安装命令,其代码已托管至github,相应命令改为现“git clone git://github.com/sitesupport/gevent”

2012-11-04,修正pip安装命令的拼写错误,原“sasy_install”改为现“easy_install”;

全新OSX系统(后面简称系统)上是没有Gevent组件的,但不少的Python应用中会引用它,我们看看怎么样在系统上安装Gevent。

环境准备

安装libevent

首先,需要确保系统中是否安装了libevent,如果还没有,可以通过MacPorts或者Homebrew包管理工具来安装,我个人喜欢Homebrew,在控制台/Terminal使用如下命令:

$ brew install libevent

安装cython

在安装完libevent之后,开始安装cython,命令如下:

$ pip install cython

安装pip

嗯,也许你会遇到问题,控制台说pip是未知的命令,OK,那还需要安装pip:

$ easy_install pip

安装好了pip之后重新执行上一步安装cython的操作,如果得到权限不足的提示,可以配合使用sudo命令安装;

安装greenlet

然后再用pip安装greenlet组件:

$ pip install greenlet

安装gevent

克隆gevent源

做了一大堆准备工作,现在可以准备开始安装gevent了,先克隆gevent的源:

$ git clone git://github.com/sitesupport/gevent

完成gevent的克隆后就可以进行安装了,保险起见,可以先构建/build一次看看有什么问题之后再决定安装。为确保控制台当前路径为克隆下来的gevent路径下,我是把它放在Desktop上的,那么我在执行上一条命令时,可以如下方式确保路径没有错: 

$ cd cd ~/Desktop/gevent

执行安装

然后执行下面这个命令:

$ python setup.py build

如果没什么错误,就可以做最后一步安装,开始使用/引用Gevent组件了:

$ python setup.py install

附录

1、什么是gevent呢,来自开园中国社区的介绍如下:

Gevent是一个基于greenlet的Python的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效。

于greenlet、eventlet相比,性能略低,但是它封装的API非常完善,最赞的是提供了一个monkey类,可以将现有基于Python线程直接转化为greenlet,相当于proxy了一下(打了patch)。

2、什么是libevent呢,来自开园中国社区的介绍如下:

libevent是一个异步事件处理软件函式库,以BSD许可证释出。

libevent提供了一组应用程序编程接口(API),让程式设计师可以设定某些事件发生时所执行的函式,也就是说,libevent可以用来取代网络服务器所使用的循环检查架构。

由于可以省去对网络的处理,且拥有不错的效能,有些软件使用libevent作为网络底层的函式库,如:memcached、Tor。

3、什么是cython呢,来自开园中国社区的介绍如下:

准确说Cython是单独的一门语言,专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的“编译器”先将 Cython代码转变成C(自动加入了一大堆的C-Python API),然后使用C编译器编译出最终的Python可调用的模块。

4、什么是greenlet呢,来自开园中国社区的介绍如下:

greenlet 包是 Stackless 的副产品,其将微线程称为 “tasklet” 。tasklet运行在伪并发中,使用channel进行同步数据交换。

一个”greenlet”,是一个更加原始的微线程的概念,但是没有调度,或者叫做协程。这在你需要控制你的代码时很有用。你可以自己构造微线程的 调度器;也可以使用”greenlet”实现高级的控制流。例如可以重新创建构造器;不同于Python的构造器,我们的构造器可以嵌套的调用函数,而被 嵌套的函数也可以 yield 一个值。。

Greenlet是作为一个C扩展模块给未修改的解释器的。

  1. loocor posted this