bsc-s2/pykit

zkutil.CachedReader: 实现一个可以本地缓存zookeeper 数据的reader, 用于实现消费存储在zk中的配置信息的功能.

Closed this issue · 2 comments

zkutil.CachedReader

实现一个可以本地缓存zookeeper 数据的reader, 用于实现消费存储在zk中的配置信息的功能.

  • CachedReader实例对应一个zk node, 在缓存这个zk node的数据之后也支持watch的功能: 如果zk node发生改变, 可以发现并更新本地缓存.

Synopsis

cr = CachedReader('127.0.0.1:2181', conf.cluster + '/bla/importer_conf.json')
for i in range(cr['jobs']['num']):
    doit()

接口

class CachedReader(dict):
    def __init__(self, zk, path, callback=None):
    def watch(self):
    def close(self):
  • __init__:

    • zk: host列表或zk实例, 参考zklock.
    • path: 存储json配置的 zk node path.
    • callback: 可选, 指定一个callable, 在zk node改变时被调用: callback(path, old_dict, new_dict)

    __init__ 负责给对应的zk node增加一个变化回调, 当节点变化时重新设置缓存在本地的value.

  • watch: 阻塞的监视zk node的变化, 如果有变化则返回old_dict 和 new_dict.否则一直阻塞.

  • close: 关闭所有资源: watch线程, 如果需要的话, 关掉__init__创建的zk client. 以及停止回调callback

  • 读取配置使用dict风格的方式, 如果blabla/xx.json的配置信息如下:

{
  "foo": {
    "bar": 123
  }
}

cr["foo"]["bar"] 来读取对应zk node中的值123.

没问题

么问题