def start(self): self._zk.start() datawatch_next_target = DataWatch(client=self._zk, path=ZK_NEXT_TARGET, func=self._on_next_target_changed) datawatch_current_target = DataWatch( client=self._zk, path=ZK_CURRENT_TARGET, func=self._on_current_target_changed)
def start(self, zkPath): self._lastNodeList = self._zk.get_children(zkPath) try: ChildrenWatch(client=self._zk, path=zkPath, func=self._NodeChange) DataWatch(client=self._zk, path=zkPath, func=self._DataChange) # 这里的死循环就是为了不让程序退出,你可以把时间设置长一点观察,其实即便没有到60秒的睡眠时间,如果 # 子节点或者节点数量发生变化也会收到通知。这里的wathch底层就是在节点上设置监听器,然后捕捉事件,如果有 # 事件触发就调用你传递的方法来处理。 while True: time.sleep(5) print("OK") except Exception as err: print(err.message)
def get_configvalue(self,appkey,configkey,defaultvalue=None,is_watch=False): '''hight-level DataWatch, return the configvalue of the key''' configPath = os.path.join(Constants.ZOOKEEPER_ROOT_PATH,appkey,configkey) if not self.iszktimeout(): if configPath not in self.WatchDict: # first watch and add it ;will not fire event if is_watch: DataWatch(self.zk.client,configPath,self._datawatch_handle) self.WatchDict[configPath] = True # if not load conf then init it if appkey not in self.initAppKeyDict: self.loadconfig_byappKey_fromzk(appkey) self.initAppKeyDict[appkey] = True configvalue = self.localCacheDict[configPath] return configvalue if configvalue else defaultvalue
def exec(self): zkc = KazooClient(hosts=self._url, timeout=3) zkc.start() print('\npid=%d, zookeeper version: %s' % (os.getpid(), zkc.server_version())) try: self._list_ori = zkc.get_children(self._zk_node) print('\nattach data and child watch') # watch func trigger for each change DataWatch(client=zkc, path=self._zk_node, func=self._data_change) ChildrenWatch(client=zkc, path=self._zk_node, func=self._child_change) print('\nzk watch is running ...') time.sleep(6) finally: if zkc is not None: zkc.stop()
def start(self): self._zk.start() datawatch_next_target = DataWatch( client=self._zk, path=ZK_ASSEMBLER_LAST_BUILT_TARGET, func=self._on_assembler_last_built_target_changed)
def watcher(self): try: DataWatch(client=self.zk, path=self.path, func=self.data_change) except Exception as e: print("Create data wather failed: [{}]".format(e))
def OnDataChange(data, stat): print("ZkNode Version: %s, data: %s" % (stat.version, data.decode("utf-8"))) if __name__ == '__main__': client = None try: logging.basicConfig() client = KazooClient(hosts='127.0.0.1:2181') client.start() DataWatch(client, "/tfs/tfs_clusters/ht_gpu/11.7.157.11", OnDataChange) sys.stdin.readline() client.stop() sys.exit(0) except KeyboardInterrupt: print('Terminated by user.') if client: client.stop() sys.exit(0) except Exception as ex: print('Exception: %s' % ex) if client: client.stop()