最近尝试gevent+zookeeper组合,google找到gevent-zookeeper库(https://github.com/jrydberg/gevent-zookeeper),gevent-zookeeper库依赖zookeeper的python库,使用它的异步接口,实现和gevent微线程的结合。
由于开发机器用的是windows系统,折腾了半天,还是没将zookeeper-3.4.3的python库编译出来。看了下编译错误,主要是vc编译c代码,要求在函数开头先定义变量。对zookeeper.c进行修改,我需要的功能代码基本编译通过(除了pyzoo_get_children方法中使用deallocate_String_vector引起的链接错误没解决)。 提供修改过的zookeeper.c和编译好的zookeeper.pyd for python2.6。
接下来,尝试gevent-zookeeper库。这个库也不支持windows系统(它使用了windows没有的fcntl库),只能自己动手改造。用zeromq的socket代替了os.pipe,改造后的 。当然也可以用系统标准的socket实现,现在这么做增加了gevent-zookeeper的依赖条件。
终于可以在windows下尝试gevent-zookeeper库,感觉还不错,接口清晰、简单,使用方便。使用中发现一个问题,单个节点的监控功能(DataMonitor)能实时收到回调信息,子节点监控功能(ChildrenMonitor)却不是实时回调的,这个有点怪异。