最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Zookeeper接口kazoo實例解析

 更新時間:2018年01月22日 09:50:09   作者:run4life  
這篇文章主要介紹了Zookeeper接口kazoo實例解析,簡單介紹了Zookeeper接口接口的開發(fā),然后分享了相關(guān)實例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文主要研究的是Zookeeper接口kazoo的相關(guān)內(nèi)容,具體介紹如下。

zookeeper的開發(fā)接口以前主要以java和c為主,隨著python項目越來越多的使用zookeeper作為分布式集群實現(xiàn),python的zookeeper接口也出現(xiàn)了很多,現(xiàn)在主流的純python的zookeeper接口是kazoo。因此如何使用kazoo開發(fā)基于python的分布式程序是必須掌握的。

1.安裝kazoo

yum install python-pip
pip install kazoo

安裝過程中會出現(xiàn)一些python依賴包未安裝的情況,安裝即可。

2.運行kazoo基礎(chǔ)例子kazoo_basic.py

import time
from kazoo.client import KazooClient
from kazoo.client import KazooState
def main():
 zk=KazooClient(hosts='127.0.0.1:2182')
 zk.start()
 
 @zk.add_listener
 def my_listener(state):
 if state == KazooState.LOST:
  print("LOST")
 elif state == KazooState.SUSPENDED:
  print("SUSPENDED")
 else:
  print("Connected")
 #Creating Nodes
 # Ensure a path, create if necessary
 zk.ensure_path("/my/favorite")
 # Create a node with data
 zk.create("/my/favorite/node", b"")
 zk.create("/my/favorite/node/a", b"A")
 #Reading Data
 # Determine if a node exists
 if zk.exists("/my/favorite"):
 print("/my/favorite is existed")
 @zk.ChildrenWatch("/my/favorite/node")
 def watch_children(children):
 print("Children are now: %s" % children)
 # Above function called immediately, and from then on
 @zk.DataWatch("/my/favorite/node")
 def watch_node(data, stat):
 print("Version: %s, data: %s" % (stat.version, data.decode("utf-8")))
 # Print the version of a node and its data
 data, stat = zk.get("/my/favorite/node")
 print("Version: %s, data: %s" % (stat.version, data.decode("utf-8")))
 # List the children
 children = zk.get_children("/my/favorite/node")
 print("There are %s children with names %s" % (len(children), children))
 #Updating Data
 zk.set("/my/favorite", b"some data")
 #Deleting Nodes
 zk.delete("/my/favorite/node/a")
 #Transactions
 transaction = zk.transaction()
 transaction.check('/my/favorite/node', version=-1)
 transaction.create('/my/favorite/node/b', b"B")
 results = transaction.commit()
 print ("Transaction results is %s" % results)
 zk.delete("/my/favorite/node/b")
 zk.delete("/my", recursive=True)
 time.sleep(2)
 zk.stop()
if __name__ == "__main__":
 try:
 main()
 except Exception, ex:
 print "Ocurred Exception: %s" % str(ex)
 quit()

運行結(jié)果:

Children are now: [u'a']
Version: 0, data: 
Version: 0, data: 
There are 1 children with names [u'a']
Children are now: []
Transaction results is [True, u'/my/favorite/node/b']
Children are now: [u'b']
Children are now: []
No handlers could be found for logger "kazoo.recipe.watchers"
LOST

以上程序運行了基本kazoo接口命令,包括創(chuàng)建刪除加watcher等操作,通過調(diào)試并對比zookeeper服務(wù)節(jié)點znode目錄結(jié)構(gòu)的變化,就可以理解具體的操作結(jié)果。

3.運行通過kazoo實現(xiàn)的分布式鎖程序kazoo_lock.py

import logging, os, time
from kazoo.client import KazooClient
from kazoo.client import KazooState
from kazoo.recipe.lock import Lock

class ZooKeeperLock():
 def __init__(self, hosts, id_str, lock_name, logger=None, timeout=1):
 self.hosts = hosts
 self.id_str = id_str
 self.zk_client = None
 self.timeout = timeout
 self.logger = logger
 self.name = lock_name
 self.lock_handle = None
 self.create_lock()
 def create_lock(self):
 try:
 self.zk_client = KazooClient(hosts=self.hosts, logger=self.logger, timeout=self.timeout)
 self.zk_client.start(timeout=self.timeout)
 except Exception, ex:
 self.init_ret = False
 self.err_str = "Create KazooClient failed! Exception: %s" % str(ex)
 logging.error(self.err_str)
 return
 try:
 lock_path = os.path.join("/", "locks", self.name)
 self.lock_handle = Lock(self.zk_client, lock_path)
 except Exception, ex:
 self.init_ret = False
 self.err_str = "Create lock failed! Exception: %s" % str(ex)
 logging.error(self.err_str)
 return
 def destroy_lock(self):
 #self.release()
 if self.zk_client != None:
 self.zk_client.stop()
 self.zk_client = None
 def acquire(self, blocking=True, timeout=None):
 if self.lock_handle == None:
 return None
 try:
 return self.lock_handle.acquire(blocking=blocking, timeout=timeout)
 except Exception, ex:
 self.err_str = "Acquire lock failed! Exception: %s" % str(ex)
 logging.error(self.err_str)
 return None
 def release(self):
 if self.lock_handle == None:
 return None
 return self.lock_handle.release()
 def __del__(self):
 self.destroy_lock()

def main():
 logger = logging.getLogger()
 logger.setLevel(logging.INFO)
 sh = logging.StreamHandler()
 formatter = logging.Formatter('%(asctime)s -%(module)s:%(filename)s-L%(lineno)d-%(levelname)s: %(message)s')
 sh.setFormatter(formatter)
 logger.addHandler(sh)
 zookeeper_hosts = "127.0.0.1:2182"
 lock_name = "test"
 lock = ZooKeeperLock(zookeeper_hosts, "myid is 1", lock_name, logger=logger)
 ret = lock.acquire()
 if not ret:
 logging.info("Can't get lock! Ret: %s", ret)
 return
 logging.info("Get lock! Do something! Sleep 10 secs!")
 for i in range(1, 11):
 time.sleep(1)
 print str(i)
 lock.release()

if __name__ == "__main__":
 try:
 main()
 except Exception, ex:
 print "Ocurred Exception: %s" % str(ex)
 quit()

將該測試文件copy到多個服務(wù)器,同時運行,就可以看到分布式鎖的效果了。

總結(jié)

以上就是本文關(guān)于Zookeeper接口kazoo實例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • 淺談python中的@以及@在tensorflow中的作用說明

    淺談python中的@以及@在tensorflow中的作用說明

    這篇文章主要介紹了淺談python中的@以及@在tensorflow中的作用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python數(shù)據(jù)可視化之用Matplotlib繪制常用圖形

    Python數(shù)據(jù)可視化之用Matplotlib繪制常用圖形

    Matplotlib能夠繪制折線圖、散點圖、柱狀圖、直方圖、餅圖. 我們需要知道不同的統(tǒng)計圖的意義,以此來決定選擇哪種統(tǒng)計圖來呈現(xiàn)我們的數(shù)據(jù),今天就帶大家詳細(xì)了解如何繪制這些常用圖形,需要的朋友可以參考下
    2021-06-06
  • Python中Functools模塊的高級操作詳解

    Python中Functools模塊的高級操作詳解

    functools模塊是Python標(biāo)準(zhǔn)庫中的一個寶庫,提供了一些有用的功能,可以幫助您更好地利用函數(shù)的潛力,下面小編就來為大家介紹一下functools模塊的相關(guān)具體使用吧
    2023-11-11
  • 基于Python實現(xiàn)開心消消樂小游戲的示例代碼

    基于Python實現(xiàn)開心消消樂小游戲的示例代碼

    這篇文章主要是帶著大家自制一款開心消消樂,還原度超高哦~還在等什么動動手就能擁有屬于自己的”消消樂“小游戲呢,趕快學(xué)起來吧
    2022-05-05
  • Python學(xué)習(xí)工具jupyter notebook安裝及用法解析

    Python學(xué)習(xí)工具jupyter notebook安裝及用法解析

    這篇文章主要介紹了Python學(xué)習(xí)工具jupyter notebook安裝及用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Python內(nèi)建屬性getattribute攔截器使用詳解

    Python內(nèi)建屬性getattribute攔截器使用詳解

    這篇文章主要為大家介紹了Python內(nèi)建屬性getattribute攔截器使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • python 字典 setdefault()和get()方法比較詳解

    python 字典 setdefault()和get()方法比較詳解

    這篇文章主要介紹了python 字典 setdefault()和get()方法比較詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python Pandas 讀取txt表格的實例

    python Pandas 讀取txt表格的實例

    下面小編就為大家分享一篇python Pandas 讀取txt表格的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python?PyQt拖動控件對齊到網(wǎng)格的方法步驟

    Python?PyQt拖動控件對齊到網(wǎng)格的方法步驟

    pyqt是一個用于創(chuàng)建GUI應(yīng)用程序的跨平臺工具包,它將python與qt庫融為一體,下面這篇文章主要給大家介紹了關(guān)于Python?PyQt拖動控件對齊到網(wǎng)格的方法步驟,需要的朋友可以參考下
    2022-12-12
  • 利用Python編寫簡易的錄制屏幕小工具

    利用Python編寫簡易的錄制屏幕小工具

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語言編寫一個簡易的錄制屏幕小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動手嘗試一下
    2022-08-08

最新評論

郧西县| 巴林左旗| 佛教| 大宁县| 秭归县| 黄冈市| 舟曲县| 宁都县| 石首市| 盐城市| 浦城县| 藁城市| 佛学| 西宁市| 阿勒泰市| 朝阳市| 广宗县| 镇原县| 双流县| 南平市| 焉耆| 巴彦县| 吴忠市| 禄劝| 台北市| 文成县| 渭源县| 青阳县| 清原| 威远县| 玛纳斯县| 留坝县| 淳安县| 志丹县| 安国市| 汝南县| 精河县| 吉林省| 东明县| 探索| 浦东新区|