用gevent开发非阻塞的etcd python客户端模块

起因,我这边有个服务端,是专门控制服务发现和注册功能,任务的调度都是用gevent来实现,如果直接在gevent里使用python-etcd,会发生阻塞的,gevent对于那些网络模块很是敏感。 我不打算在任务调度器里面用多线程,所以我直接自己重写个支持gevent的python etcd模块。 

(python-etcd是用urllib2开发的,虽然gevent有urllib2的patch,但我不打算在python-etcd里面开发含有gevent逻辑的分支 。   对于我这种天天折腾爬虫的人来说,gevent urllib2不是个好选择,有不少的坑,大多数人还是推荐gevent requests的组合。 )

额外提一句,etcd真是个小而精的东西,轻松的实现服务发现,但etcd这东西坑也真是不少 ! 其中最让人恼火的是在watch key过多的情况下,出现各种异常,给etcd提交了issue,结果…..   当我没说,继续看下面 !


关于gevent etcd客户端,原文地址是 http://xiaorui.cc/2015/10/12/%E7%94%A8gevent%E5%BC%80%E5%8F%91%E9%9D%9E%E9%98%BB%E5%A1%9E%E7%9A%84etcd-python%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%A8%A1%E5%9D%97/


利用周六周天的时间开发了etcd客户端,但功能有些简单,再说我自己也没想法把他做的很复杂。 已经把项目打包到pypi了,有兴趣的朋友可以测试下。 


项目名: gevent-etcd  

地址:    https://github.com/rfyiamcool/gevent-etcd

介绍:

gevent-etcd 是一个使用gevent requests封装的python client模块. gevent-etcd用来解决在多任务并发下有io阻塞的情况. 要知道在github中有不少etcd的python模块,但是基本用都采用urllib http模块.跟gevent不怎么兼容. 虽然可以利用threading 、multiprocessing进行并发处理,但gevent协程的好处,我想大家知道!

我个人的看法,在网络io阻塞的问题上,能用协程坚决不用多线程.

另外,gevent-etcd的功能还很简单,期待有人提交pull request ,这项目简单易懂,很容易就加入的。 

gevent-etcd模块的用法:

pypi安装

pip install gevent_etcd

通过github来源码安装

git clone https://github.com/rfyiamcool/gevent-etcd.git
cd gevent-etcd
python setup.py install

现在存在的问题,不间断的watch有些问题,watch的功能还比较的简单,选举功能没有,也不打算开发集群管理的功能。  



有兴趣的朋友,可以跟我一起开发。 


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

1 Response

  1. 云计算 2015年10月29日 / 上午7:25

    etcd就那性能你还gevent?

发表评论

邮箱地址不会被公开。 必填项已用*标注