广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Zookeeper详解(十):Pytho
  • 289
分享到

Zookeeper详解(十):Pytho

详解ZookeeperPytho 2023-01-31 06:01:01 289人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

python对ZooKeeper的基本操作#!/usr/bin/env Python # -*- coding: utf-8 -*- import sys from kazoo.client import KazooClient de


pythonZooKeeper的基本操作

#!/usr/bin/env Python
# -*- coding: utf-8 -*-

import sys
from kazoo.client import KazooClient


def main():
    try:

        nodePath = "/zktest"
        host = "172.16.48.171"
        port = "2181"
        timeout = 100
        zkc = KazooClient(hosts=host + ':' + port, timeout=timeout)
        zkc.start()

        # 判断节点是否存在
        if zkc.exists(nodePath+"/test111"):
            print nodePath + "/test111", "存在"
        else:
            # 建立节点,成功后返回新节点路径
            childrenPath = zkc.create(nodePath+"/test111", "test111")
            print "创建节点:", childrenPath, "成功。"
            # 创建临时节点,连接断开则节点自动删除
            zkc.create(nodePath+"/test999", "test999", ephemeral=True)

        # 获取节点数据和节点数据,返回2个值,一个是节点数据,一个是节点stat,这是个ZnodeStat对象,它其实是节点属性,一共有12个属性
        dataAndStat = zkc.get(nodePath)
        data = dataAndStat[0]
        print "数据为:", data
        stat = dataAndStat[1]
        print "数据版本号为:", stat.version
        print "数据长度为:", stat.data_length
        print "子节点数量:", stat.numChildren

        # 更新节点数据,数据最大为1MB超过则报错,成功后返回 ZnodeStat 对象
        stat = zkc.set(nodePath, value="test222")
        print "数据版本号为:", stat.version

        # 删除节点,后面的参数用于控制是否递归删除,默认是False,但是这样就会有一个问题,如果该节点下有子节点则本次删除失败,你需要先删除
        # 它下面的所有子节点才行
        if zkc.exists(nodePath+"/test111"):
            result = zkc.delete(nodePath+"/test111", recursive=False)
            if result:
                print "删除节点成功。"

        print nodePath + " 的子节点为:", zkc.get_children(nodePath)

        zkc.close()
        zkc.stop()
    except Exception as err:
        print err.message


if __name__ == "__main__":
    try:
        main()
    finally:
        sys.exit()


Watcher事件操作

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import time
from kazoo.client import KazooClient
from kazoo.client import ChildrenWatch
from kazoo.client import DataWatch

"""
Watcher可以通过两种方式设置,一种是在调用ZK客户端方法的时候传递进去,比如 zk.get_children("/node", watch=FUN),但是这种方法是一次性的
也就是触发一次就没了,如果你还想继续监听一个事件就需要再次注册。
另外一种方法是通过高级api实现,监控数据或者节点变化,它只需要我们注册一次。一次性事件关注是zookeeper默认的即便在JAVA客户端里也是,这种高级别
API在JAVA里是zkclient,而在Python里面就是kazoo。高级API其实是对低级API的封装,对用户来讲更加好用。
"""

__metaclass__ = type


class zkWatcherTest:

    def __init__(self, host, port, timeout=10):
        self._nodename = ''
        self._host = host
        self._port = port
        self._timeout = timeout
        self._zk = KazooClient(hosts=self._host + ':' + self._port, timeout=self._timeout)
        self._zk.start()
        self._lastNodeList = []

    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(60)
                print "OK"
        except Exception as err:
            print err.message

    def _NodeChange(self, children):
        """
        处理子节点变化
        :param children: 这个参数并不需要你传递进来,因为把这个方法传递进ChiledrenWatcher,会返回一个当前子节点列表
        :return:
        """
        # print children
        # 如果新节点列表长度大于上次获取的节点列表长度,说明有增加
        if len(children) > len(self._lastNodeList):
            for node in children:
                if node not in self._lastNodeList:
                    print "新增加的节点为:", str(node)
                    self._lastNodeList = children
        else:
            for node in self._lastNodeList:
                if node not in children:
                    print "删除的节点为:", str(node)
                    self._lastNodeList = children

    def _DataChange(self, data, stat):
        """
        处理节点的数据变化
        :param data:
        :param stat:
        :return:
        """
        print "数据发生变化"
        print "数据为:", data
        print "数据长度:", stat.dataLength
        print "数据版本号version:", stat.version
        print "cversion:", stat.cversion
        print "子节点数量:", stat.numChildren


def main():
    try:
        zkwt =zkWatcherTest(host="172.16.48.171", port="2181")
        zkwt.start("/zktest")
    except Exception as err:
        print err.message


if __name__ == "__main__":
    try:
        main()
    finally:
        sys.exit()

关于Watcher,网上很多帖子都是通过装饰器的方式实现的,其实我上面的方式和装饰器是一样的,只是形式不同罢了。功能都能实现,只是用装饰器有时候会不方便。

--结束END--

本文标题: Zookeeper详解(十):Pytho

本文链接: https://www.lsjlt.com/news/189949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Zookeeper详解(十):Pytho
    Python对Zookeeper的基本操作#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from kazoo.client import KazooClient de...
    99+
    2023-01-31
    详解 Zookeeper Pytho
  • zookeeper详解
    一 zookeeper介绍         首先需要了解zookeeper是什么,zookeeper是一个分布式协调服务。所谓分布式协调主要是来解决分布式系统中多个进程之间的同步限制,防止出现脏读,例如我们常说的分布式锁。         ...
    99+
    2023-09-12
    java
  • Zookeeper 数据结构详解
    Zookeeper https://zookeeper.apache.org/doc/current/zookeeperOver.html ZooKeeper is a distributed, open-source coord...
    99+
    2016-10-29
    Zookeeper 数据结构详解
  • 详解Zookeeper基础知识
    目录1. 简介2. 数据模型2.1 模型结构2.2 模型的特点2.3 节点分类2.3.1 Persistent2.3.2 Persistent Sequential2.3.3 Eph...
    99+
    2022-11-12
  • 扣丁学堂Python培训详解Pytho
    Python生成器与迭代器对于喜欢Python开发的小伙伴们来说应该是不陌生的,不了解的小伙伴也没有关系,本篇文章扣丁学堂Python培训小编就给小伙伴们详解一下Python生成器与迭代器,感兴趣的小伙伴就随小编来了解一下吧。 列表生成式...
    99+
    2023-01-31
    详解 丁学堂 Python
  • springboot+dubbo+zookeeper的简单实例详解
    目录服务端消费端在dubbo-admin-0.0.1-SNAPSHOT.jar的路径下启动dubbo,java -jar dubbo-admin-0.0.1-SNAPSHOT.jar...
    99+
    2022-11-12
  • Zookeeper详解(从安装—入门—使用)
    Zookeeper详解(从安装—入门—简单使用) 🍋1.zookeeper概念🍋2.zookeeper的安装🍊2.1环境准备:🍊2.2下载🍊2.3上传并...
    99+
    2023-08-18
    zookeeper 服务器 java
  • Java中的zookeeper常用命令详解
    目录1.zkCli.sh客户端2.多节点类型创建3.查询节点4.set数据5.删除节点6.权限设置7.其他命令注意我这里用的是官方最稳定的版本3.7.1,版本之间有个别命令是有差距的...
    99+
    2022-11-13
  • apache zookeeper使用方法实例详解
    本文涉及了Apache Zookeeper使用方法实例详解的相关知识,接下来我们就看看具体内容。简介Apache Zookeeper 是由 Apache Hadoop 的 Zookeeper 子项目发展而来,现在已经成为了 Apache 的...
    99+
    2023-05-31
    apache zookeeper
  • Pytho的HTTP交互httpx包模块使用详解
    目录HTTP 响应自定义客户端尝试 httpxPython 的 httpx 包是一个复杂的 Web 客户端。当你安装它后,你就可以用它来从网站上获取数据。像往常一...
    99+
    2022-11-13
  • 基于Zookeeper实现分布式锁详解
    目录1、什么是Zookeeper?2、Zookeeper节点类型3、Zookeeper环境搭建4、Zookeeper基本使用5、Zookeeper应用场景6、Zookeeper分布式...
    99+
    2022-11-12
  • MySQL——select_type详解——六月十五
    select_type:查询的类型。 SIMPLE:简单 SELECT,不需要使用 UNION 操作或子查询。PRIMARY:如果查询包含子查询,最外层的 SELECT 被标记为 P...
    99+
    2023-10-10
    mysql sql 数据库 select_type
  • Redis教程(十三):管线详解
    一、请求应答协议和RTT: Redis是一种典型的基于C/S模型的TCP服务器。在客户端与服务器的通讯过程中,通常都是客户端率先发起请求,服务器在接收到请求后执行相应的任务,最后再将获取的数据或处理...
    99+
    2022-06-04
    管线 详解 教程
  • Redis教程(十):持久化详解
    一、Redis提供了哪些持久化机制: 1). RDB持久化: 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2). AOF持久化: 该机制将以日志的形式...
    99+
    2022-06-04
    详解 持久 教程
  • MySQL总结(十一)子查询-详解
    子查询 1. 什么是子查询 -- 需求:查询开发部中有哪些员工 select * from emp; -- 通过两条语句查询 select id from dept where name="开发部" ; ...
    99+
    2020-06-24
    MySQL总结(十一)子查询-详解
  • kubernetes实践之四十三: Service详解
    一:简介通过Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求负载分发到后端各个应用容器上,实现Pod的负载均衡。二:Service定义模版重要属性说明1.spec.type Service的类型,指定Serv...
    99+
    2023-06-04
  • 【K8S系列】第十三讲:Ingress详解
    目录 序言 1.Ingress基本介绍 1.1 暴露服务问题  1.2 什么是Ingress  1.2 Ingress的核心组件 1.2.1 ingress 1.2.2 ingress-controller 1.2.3 反向代理负载均衡...
    99+
    2023-08-31
    kubernetes java docker
  • Dubbo+zookeeper搭配分布式服务的过程详解
    目录分布式架构: Dubbo 是什么Dubbo:思想:依赖:分布式架构:  1.当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐...
    99+
    2022-11-13
  • Zookeeper原理及在Dubbo中的使用示例详解
    目录zookeeper原理用法配置管理命名服务分布式锁集群管理应用实例引入依赖配置 Dubbo 和 Zookeeper定义接口实现接口启动服务zookeeper Zookeeper...
    99+
    2023-03-19
    Zookeeper在Dubbo使用原理 Zookeeper Dubbo
  • 详解Windows Server 2008十大最新特性
    很多用户都知道微软在WinHEC 2007大会上总结了WS2K8里最值得期待的十大特性,改变企业使用Windows的方式,以及网络的物理和逻辑架构。一起来看看吧。 10、自修复NTFS文件系统 从DOS时代开始,文件系...
    99+
    2023-05-21
    windowsserver2008 WS2K8特性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作