gevent pool怎么编译

gevent为各种并发和网络相关的任务提供了整洁的API。
拥有以下特点:
基于libev的更快的时间循环。
轻量级的执行单元,基于greenlet。
与Python标准库相似的API。
sockets有SSL支持。
通过c-ares或者线程池来执行DNS查询。
支持标准的或第三方的供阻塞式sockets使用的库和模块。
gevent社区也翻译了中文版的程序员指南:
:http://sdiehl.github.io/gevent-tutorial/
:/surfly/gevent
资源整理者简介:
可能感兴趣的文章
按分类快速查找
关于资源导航
伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1296 项工具资源。
关于资源导航
伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。
新浪微博:
推荐微信号
(加好友请注明来意)
- 好的话题、有启发的回复、值得信赖的圈子
- 分享和发现有价值的内容与观点
- 为IT单身男女服务的征婚传播平台
- 优秀的工具资源导航
- 翻译传播优秀的外文文章
- 国内外的精选博客文章
- UI,网页,交互和用户体验
- 专注iOS技术分享
- 专注Android技术分享
- JavaScript, HTML5, CSS
- 专注Java技术分享
- 专注Python技术分享
& 2016 伯乐在线查看: 5570|回复: 8
BCM63XX 可用 gevent包 ,RG100A实测可用。
本帖最后由 wsxqwps 于
11:15 编辑
& && & PS:目前新版的goagent 貌似需要GEVENT模块的支持 ,而 官方源里并没有这个包提供下载,所以自己编译了一个,提供给有需要的同学。
安装这个前需先配置 goagent 环境,具体可参考:。
& && &路由型号:RG100A
& && &固件版本:attitude_adjustment/12.09-rc2/&&
& &RG100A 下测试 完美运行 。
& &将附件解压,上传到路由器,先安装python-greenlet_0.4.0-1_brcm63xx.ipk再安装gevent_0.13.8-1_brcm63xx.ipk。
& &想透明代理可以安装 iptables 模块 iptables-mod-nat-extra.
& &设置如下:
& &opkg update
& &安装 iptables-mod-nat-extra 模块
& &opkg install iptables-mod-nat-extra
& &然后设置 全局转发代理
& &echo iptables -t nat -I PREROUTING&&-i br-lan -p tcp -d 1.1.1.1 --dport 80 -j REDIRECT --to-ports 8087&&&&/etc/firewall.user
& &设置想要科学上网的网址
& &比如想要上 youtube
& &echo address=//1.1.1.1 &&/etc/dnsmasq.conf
& &echo address=//1.1.1.1 &&/etc/dnsmasq.conf
& &这个也可以使用 winscp 或者 vi 修改 /etc/dnsmasq.conf文件,在文件的最后添加要全局代理的网址,
& &格式如下:
& &address=/网址/1.1.1.1。
& &以上全局代理整理自网络。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
好谢谢,支持啊。
很好,不需其它包支持吗?苦于空间问题,一值没有搞成,要是可行,实在太感谢楼主了。
qaqaqa 发表于
很好,不需其它包支持吗?苦于空间问题,一值没有搞成,要是可行,实在太感谢楼主了。 ...
不安装 python - gevent模块 Go-Agent 应该也是能用的吧 。。
装了这个 貌似 出错的提示少了一些。
具体请自行测试 。其他的依赖包系统会自行安装的。
请问楼主,你的python版本是?我的DB120路由器,gevent没有加载成功,请指教。
本帖最后由 wsxqwps 于
00:45 编辑
sancome 发表于
请问楼主,你的python版本是?我的DB120路由器,gevent没有加载成功,请指教。 ...
& && &路由型号:RG100A
& && &固件版本:attitude_adjustment/12.09-rc2/
& && &python 从固件自带软件源安装。
这个厉害!葱白楼主!
GOAGENT 现在是3.2.3,需要新python gevent ,楼主有FOR BRCM63的新python gevent 吗?
Powered by为R6300v2编译python
为R6300v2编译python
新手站长信息
为R6300v2编译python
时间: 14:53 /
来源:网络整理 /
作者:屌丝站长 /
前不久入了一个R6300v2: 大家可以在wikidevi上看到它的硬件配置: CPU是Broadcom BCM0 MHz),我们可以在Broadcom官网上看到他的一些详细信息: 这么好的配置不用来折腾简直就是浪费。一直
前不久入了一个R6300v2:
大家可以在wikidevi上看到它的硬件配置:
CPU是Broadcom BCM0 MHz),我们可以在Broadcom官网上看到他的一些详细信息:
这么好的配置不用来折腾简直就是浪费。一直期待着能刷系统……直到最近,出了个R6300v2的dd-wrt固件:
不过还是beta版,很多功能还不怎么好,本人刷了之后最蛋疼的就是Mac OS X不能搜到dd-wrt的5G网络,但同设备的Windows却可以,非常郁闷……
不过这不是我们这次讨论的重点
我们可以在固件下载页面中找到源码,下载后我们查看Build Instructions可以发现使用的工具链是hndtools-arm-linux-2.6.36-uclibc-4.5.3,当然你也可以用你喜欢的工具链,但是可能需要重新编译一下固件了……
另外这个使用的工具链我没找到在哪里可以下,不过我倒是在github上看到了:
/RMerl/asuswrt-merlin/tree/master/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3
当然,你也可以用buildroot自己配置一个出来……
本人一开始用错工具链搞得各种符号有问题,各种奇葩的问题,比如这样:
就算是这样还是我费劲千辛万苦,去掉ctype的依赖(比如toupper等函数)之后的结果……好不容易能运行python了,但是组件…………
后来换回来之后一切非常顺利
说了这么多,我们还是来看看如何编译python吧,其实我们更需要的是编译一些python的组件,比如pyOpenSSL等
当然,我们的编译环境在Ubuntu下
编译OpenSSL的命令非常简单,关于源码下载什么的我就不说了,没意思。prefix可根据自己的需要修改
CC=arm-linux-gcc CXX=arm-linux-g++ AR=arm-linux-ar RANLIB=arm-linux-ranlib ./Configure no-asm shared --prefix=/usr/local/arm/ssl linux-armv4
配置完成后就是make了
编译libevent和zlib也差不多:
CC=arm-linux-gcc CXX=arm-linux-g++ AR=arm-linux-ar RANLIB=arm-linux-ranlib ./configure --prefix=/usr/local/arm/libevent --host=arm-linux
make install
CC=arm-linux-gcc CXX=arm-linux-g++ AR=arm-linux-ar RANLIB=arm-linux-ranlib ./configure --prefix=/usr/local/arm/zlib
make install
之后就是编译python及其的组件了,我主要是参考了这里:
写得非常详细,我编译的版本是2.7.3。不过我没有编译SQLite就是了,主要是因为用不上……
为了让编译组件的时候能找到对应的头文件和库,我们在patch后还需要自己手工修改一下setup.py,在 detect_modules(patch过)中找好为交叉编译设置搜索路径的地方,加上我们编译的库,这里我还加上了ncurses(本来想装个 screen),但是最后事实证明,在R6300v2上的dd-wrt上完全用不上……
lib_dirs += [
?0?2?0?2?0?2?0?2'/usr/local/arm/zlib/lib', '/usr/local/arm/ssl/lib', '/usr/local/arm/ncurses/lib'
?0?2?0?2?0?2?0?2]
inc_dirs += [
?0?2?0?2?0?2?0?2'/usr/local/arm/zlib/include', '/usr/local/arm/ssl/include', '/usr/local/arm/ncurses/include/ncursesw', '/usr/local/arm/ncurses/include'
?0?2?0?2?0?2?0?2]
然后按照那里写的方法编译就好了,主要原理就是先编译一个host的python,可以在机器上跑,其实我们可以直接用系统带的python2.7
接下来就是编译其他的python组件,弄成egg在dd-wrt上用easy_install装就好了
先准备好setuptools(目录与Python源码目录同一目录下)
下载并解压
这不是最新版,大家想要的话可以尝试最新版
编译pyOpenSSL(目录与Python源码目录同一目录下):
cd pyOpenSSL-0.13/
OPENSSL=/usr/local/arm/ssl
PYTHONPATH=../Python-2.7.3/Lib ../Python-2.7.3/hostpython setup.py build_ext -I$OPENSSL/include -L$OPENSSL
sed -i -e "s|from distutils.core import Extension, setup|from setuptools import setup\nfrom distutils.core import Extension|g" setup.py
PYTHONPATH=../Python-2.7.3/Lib:../setuptools-0.6c11 ../Python-2.7.3/hostpython setup.py bdist_egg
mv dist/pyOpenSSL-0.13-py2.7-linux-i686.egg dist/pyOpenSSL-0.13-py2.7.egg
编译greenlet:
CC=arm-linux-gcc CXX=arm-linux-g++ AR=arm-linux-ar RANLIB=arm-linux-ranlib gcc=arm-linux-gcc ar=arm-linux-ar ranlib=arm-linux-ranlib ld=arm-linux-ld PYTHONPATH=/usr/lib/ python setup.py build_ext -I../Python-2.7.3/Include
#这里可能需要修改/usr/bin下的ld和gcc,链接到arm-linux的,完成编译后记得改回来
sed -i -e "s|from distutils.core import Extension, setup|from setuptools import setup\nfrom distutils.core import Extension|g" setup.py
PYTHONPATH=../setuptools-0.6c11 python2.7 setup.py bdist_egg
mv dist/greenlet-0.4.1-py2.7-linux-i686.egg dist/greenlet-0.4.1-py2.7.egg
编译gevent:
LIBEVENT=/usr/local/arm/libevent
PYTHONPATH=../Python-2.7.3/Lib ../Python-2.7.3/hostpython setup.py build_ext -I$LIBEVENT/include -L$LIBEVENT/lib
sed -i -e "s|from distutils.core import Extension, setup|from setuptools import setup\nfrom distutils.core import Extension|g" setup.py
PYTHONPATH=../Python-2.7.3/Lib:../setuptools-0.6c11 ../Python-2.7.3/hostpython setup.py bdist_egg
mv dist/gevent-0.13.8-py2.7-linux-i686.egg dist/gevent-0.13.8-py2.7.egg
大致流程与编译pyOpenSSL相同。
最后在R6300v2的dd-wrt上用easy_install安装egg文件即可
python ez_setup.py
easy_install pyOpenSSL-0.13-py2.7.egg
easy_install greenlet-0.4.1-py2.7.egg
easy_install gevent-0.13.8-py2.7.egg
这样我们就安装完我们需要的组件了,这篇文章主要目的是记录一下过程,具体细节并不是非常详细,如果遇到些什么问题可以留言。
(无良小编:admin)
发表评论:
TA的最新馆藏gevent怎么编译_百度知道
gevent怎么编译
opt/optwget https.7 cythonln -s /distutils&#47.com/p/goagent/issues/detail.gzcd pyOpenSSL-0;python2,在整合了一些反馈之后:#define ECB_MEMORY_FENCE
__asm__ __volatile__ (&quot.7cython &#47:ipkg -force-removal-of-dependent-packages remove python26rm -rf &#47.0rc2-py2.0rc2-py2.gzcd gevent-1.0rc2-py2;python2.cython之后下载gevent,给Python提供一个轻量级的协同程序.mkdtemp(prefix=&quot.python-eggs&#39:&quot.6之后更新://github.] = &#39.mkdtemp(prefix=&lib&#47.google:cd &#47.7-linux-mips。首先easy_install的安装路径莫名其妙的指向了python2.environ['opt&#47.org/packages/source/p/pyOpenSSL/pyOpenSSL-0;;site-packages&#47,但Github上的gevent源码已经更新到了1,会造成安装某些组件时tmp剩余空间不足而导致的安装失败;opt&#47.com/downloads/Sit ;lib&#47,作为一个C的扩展模块.0rc2成功但是无法运行Goagent最新版只能运行2.py文件.gztar zxvf pyOpenSSL-0,修改 &#47.7-linux-mips.egg gevent-1,运行Goagent可能会提示;opt/opt中创建tmp文件夹,在。修改 /local&#47.libev&#47,找到604行的;opt&#47:1os,将1site-dirs
= /site-packages&#47.com/p/goagent/issues/detail.tmp&quot:1import os下一行添加.0rc2-py2,我们要手动将其指定到挂载的U盘当中.gz" target="_blank">http.6+gevent0;opt&#47:ipkg updateipkg upgradeipkg install busybox buildroot make grep openssl openssl-dev libuclibc++ wget-ssl python27 py27-setuptools安装完成之后://code,在自己的路由器上成功更新了python和opt&#47: ;bin&#47.Greenlets主程序运行的所有系统进程是合理安排的.0rc2环境的搭建之前因为没有搜索到在Tomato中编译安装gevent的教程;lib&#47.7cygdb &#47.eggunzip &#47,dir=&quot.7的支持现在博主给出啦方法搬过来方便大家Tomato中python2.13;)
执行python2;easy_install-&quot.5&#47.tar.7 greenleteasy_install-2.tar://pypi,在Goagent的issues上找到了答案?id=78231#define ECB_MEMORY_FENCE
__asm__ __volatile__ (&quot.0rc2;lib&#47,最新版的Goagent本地客户端也集成的是gevent1;python2;ev,就自己琢磨出来Tomato中python2?id=7823" target="_blank">bin&#47://pypi: .org/packages/source/p/pyOpenSSL/pyOpenSSL-0;local/memory&quot。修改Goagent的proxy.7&#47.py install下载并安装pyOpenSSLcd /tmp目录.7&#47.12。首先卸载路由当中的python2;command&#47. 这不同于任何multiprocessing或者multithreading提供的库和POSIX线程; ;&#47://maskv: &quot.python.)将其修改为;bin&#47.py 文件.5.c 文件://github。虽然Python官网当中的gevent最新版本为0.com/downloads/Sit" target="_blank">https: 。心得编译前记得开启虚拟内存修改 &#47.0rc2直接编译会报错;.6及其相关组件;python2.set mips2;python2,我们可以手动指定缓存目录;)修改为.0rc2;local&#47,找到412行.cfg 文件;site-packages其次easy_install的安装临时目录指向了&#47,这是真正的并行多处理器或多线程库提供真正的并行结构首先感谢<a href="opt/memory&quot.7-linux-mips.0rc2;opt/bin&#47.7-linux-mips.;local/site-packages修改为1site-dirs
= &#47..0rc2在gevent中主要使用G&#47:1tmpdir =python2.7-linux-mips.0rc2-py2;.17原因就是缺少python2、安装所需要的依赖包;wget <a href="/technology/192.0rc2-py2;lib&#47.html作者给我的帮助我参考老方法编译gevent1://maskv:easy_install-2,因为使用了mips2的sync指令;bin&#47.8.egg 解包.8环境的搭建方法(点击这里查看);sync&quot.set mips0&quot:1tmpdir = tempfile,不知是否只有我遇到了这个问题;easy_install.eggcd /technology/192;distutils.12;opt请自行修改rm -rf /opt&#47.12python2.13;或者可以将 gevent-1;gevent-1;python2;lib&#47.7&#47:参考<a href="https,我们要修复几个py27-setuptools当中的小错误,运行. event-1;local/opt/local/setuptools/cygdb ln -s /python2;.lib/opt&#47.zip再次运行G)然后就可以使用easy_install安装greenlet与cython了(此步骤花费时间奇长无比).py install安装结束之后:
为您推荐:
其他1条回答
)).add(bar).getInt(&quot.setCreatorId(rs.setName());type&quotwhile (rs.setId(resultLcreator_id&)).setType(name&bar.getLong(&bar.getString(&quot.getLong(&));id&bar.next()) {Bars bar = new Bars()
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁出处:http://simple-/
我在选一个python的互联网框架, 本来已经定下来用Tornado了.
但我还听到很多人推荐Flask的简单性和灵活性, 还有gevent的高性能, 所以决定也试试它们以及它们和Tornado的结合.
我的示例就比”Hello World”应用稍微复杂一点儿, 它用到了模板.
下面是代码:
1, 纯粹Flask (pure_flask.py)
from flask import Flask, render_template
app = Flask(__name__)
@app.route(&#39;/&#39;)
def main_handler():
return render_template(&#39;main_j2.html&#39;, messages=&whatever&,title=&home&)
if __name__ == &#39;__main__&#39;:
app.run(port=8888, debug=False)
2, 纯粹Tornado (pure_tornado.py)
import os.path
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render(&#39;main.html&#39;, page_title=&&, body_id=&&, messages=&whatever&,title=&home&)
settings = {
&static_path&:os.path.join(os.path.dirname(__file__),&#39;static&#39;),
&template_path&:&templates&,
application = tornado.web.Application([
(r&/&, MainHandler),
], **settings)
if __name__ == &__main__&:
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
3, Flask应用运行在Gevent上 (gevent_flask.py)
from gevent.wsgi import WSGIServer
from pure_flask import app
http_server = WSGIServer((&#39;&#39;, 8888), app)
http_server.serve_forever()
4, Flask应用运行在Tornado上 (tornado_flask.py)
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from pure_flask import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(8888)
IOLoop.instance().start()
5, Tornado应用运行在Gevent上 (gevent_tornado.py)
import tornado.wsgi
import gevent.wsgi
import pure_tornado
application = tornado.wsgi.WSGIApplication([
(r&/&, pure_tornado.MainHandler),
],**pure_tornado.settings)
if __name__ == &__main__&:
server = gevent.wsgi.WSGIServer((&#39;&#39;, 8888), application)
server.serve_forever()
程序用到了三个模板文件: main.html, layout.html, and form.html. 主程序只调用了main.html.
main.html扩展(“extends”)了 layout.html, 并包含(“include”)了 form.html. 三个模板文件加起来有30kB大小.
Flask和Tornado用了不同的模板文件(Tornado是main.html, Flask是main_j2.html), 这是因为Flask和Tornado的模板语法虽然相似, 但有些地方不一样.
比如Flask(用Jinja2)模板的”block”用”{% endblock %}”表示结束, “for”用”{% endfor %}”; 但是Tornado模板则只用”{% end %}”.
我用ApacheBench测了这五个的requests per second:
ab -n 1000 -c 4 http://localhost:8888/
每个测五次. 我的机型是6年老的双核Opteron 254服务器.
下面是结果:
pure_flask: 82 88 107 102 71
pure_tornado: 144 244 241 294 290
gevent_flask: 127 139 145 152 110
tornado_flask: 110 88 74 92 101
gevent_tornado: 328 555 177 273 153
pure_flask: 90
pure_tornado: 242
gevent_flask: 135
tornado_flask: 93
gevent_tornado: 297
从上面结果可能看出Tornado比Flask快很多. 而Gevent可以让Tornado更快一些, 但快不了很多.
最终我还是喜欢Tornado应用的简单明了, 用Flask写稍微大一点的应用比较繁琐(比如要使用蓝图-blueprints等), 所以还是决定使用Tornado了.
在微博上关注:
- 创业公司
- 赛诺(武汉)技术有限公司
- 赛诺(武汉)技术有限公司
- 北京尚学硕博教育咨询
- 新浪云计算
相关 [flask tornado gevent] 推荐:
- Ken - (jobs, news)
英文: /2011/10/performance-of-flask-tornado-gevent-and.html. 我在选一个python的互联网框架, 本来已经定下来用Tornado了.
但我还听到很多人推荐Flask的简单性和灵活性, 还有gevent的高性能, 所以决定也试试它们以及它们和Tornado的结合.
- yinseny - (jobs, news)
本文有一个格式好看一点,并且有语法高亮的版本放在 readthedocs,欢迎浏览. 本文是原创,不是翻译,不过本文其实是谈翻译的. 话说用 wordpress 的 WYSIWYG 编辑器写这样的文章真痛苦啊,格式一不小心就乱了,本文是用 rst 写成,编译为 html,然后贴到这边来的. 最近用 Flask 给公司做了个小 web 应用,做的时候用英文了,现在要求翻译成中文.
- 博客园_首页
最近很多朋友都在问我关于 Flask 部署的问题,说实在的我很乐意看到和回答这样的问题,至少证明了越来越多人开始用 Flask 了. 之前我曾发表过一篇在 Ubuntu 上用 uwsgi + nginx 的 Flask 部署方法,说实在的 uwsgi 是个大坑可能用在 Django 上还好吧,不过用在 Flask 上未必就如此.
现在流行的静态博客/网站生成工具有很多,比如 Jekyll, Pelican, Middleman, Hyde 等等,
StaticGen 列出了目前最流行的一些静态网站生成工具. 我们的内部工具由 Python/Flask/MongoDB 搭建,现在需要加上文档功能,写作格式是 Markdown,不想把文档放到数据库里,也不想再弄一套静态博客工具来管理文档,于是找到了
Flask-FlatPages 这个好用的 Flask 模块.
- sasiky - (jobs, news)
内容索引 Table of Contents. 4.1
请求处理和请求参数. 4.2
RequestHandler中的主要方法. 4.4
Cookies和安全Cookies. 4.6
跨站伪造请求的防范. 4.7
静态文件和主动式文件缓存. 4.10
非阻塞式的异步请求. 7
WSGI 和 Google AppEngine.
- Ken - (jobs, news)
Tornado的核心源码是由ioloop.py和iostream.py这2个文件组成的. 前者提供了一个循环,用于处理I/O事件;后者则封装了一个非阻塞的socket. 有了这2者后,就能搭建起TCP server和HTTP server,实现异步HTTP客户端,这便是Tornado的主要内容了. 之前在研究socket时已差不多弄懂了ioloop的逻辑,于是本文就接着研究iostream了.
- LinuxTOY
Torrent Tornado 是一款完全使用 JavaScript 实现的附加组件,可以为 Firefox 浏览器增加 BT 下载功能. 体积小巧(不到 100K),完全使用 JavaScript 实现,跨平台且无本地二进制依赖. 支持和磁力链接及种子文件关联. 注意 当前 1.0 版本仅支持下载,不支持上传.
- ITeye博客
关于tornado,我这里就不详细讲了,有兴趣的同学可以通过以下两篇博客了解一下:. 我们一般用tornado来编写web程序,但实际上,tornado底层的代码非常优秀,也可以用这些代码来编写TCP应用. tornado最突出的特点就是“异步”,所以,我这里编写了一个异步的TCPServer和一个异步的TCPClient来帮助大家理解,下面直接看代码:.
- frank28_nfls - 阿福的技术BLOG
利用协程,在一个函数中从头写到尾就能实现并行,实在是太爽了. 相比之下,twisted中眼花缭乱的回调,学习曲线实在是太陡峭了.
- jin - (jobs, news)
我不想用很多时间去描述Gevent是什么,我想它官网上的一句总结足矣:. “Gevent是一种基于协程的Python网络库,它用到Greenlet提供的,封装了libevent事件循环的高层同步API. 接下来我将阐述在Mixpanel中一个内部项目使用Gevent的经验. 为了这篇文章我还动手写了几个性能小测试.
坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:@。

我要回帖

更多关于 gevent 安装 的文章

 

随机推荐