进程间锁定食谱,与馆长玩得很好

kazurator的Python项目详细描述


PyPIBuild Status

来自curatorShared Reentrant Read Write Lock配方的python端口。此包依赖于 处理动物园管理员的位子。

在此,您可能想知道为什么我不从kazoo中使用现有的锁配方。原文 我们的目标是让curatorkazoo互相尊重对方的锁:

  1. 两者都可以获得读锁,只要两者都不持有写 锁定
  2. 或者可以获取写锁,并阻止 读/写锁

我第一次尝试在kazoo中修补locks配方,但是内部有点不同。(readi不是 能够使其正常工作。

之所以有必要这样做(至少对我来说),是因为有些代码运行scala并使用curator和其他代码 正在使用kazoo运行python。

安装

pip install kazurator==0.2.0

用法

这个包有两个主要的用例。两者都与 创建进程间关键区域。

与馆长互操作示例

请参阅example目录。

进程间互斥量

首先,让我们看看如何实现一个简单的共享 (跨进程)互斥体:

fromkazoo.clientimportKazooClientfromkazuratorimportMutexdefmain():client=KazooClient(hosts="YOUR_ZK_CONNECT_STRING_HERE")client.start()mutex=Mutex(client,"/some/path")withmutex:# do your thread-safe thing hereclient.stop()

本例假设您希望单个线程处于 地区。为了支持同时多线程访问,您可以 将max_leaseskwarg设置为更高的数字。例如:

mutex=Mutex(client,"/some/path",max_leases=2)# 2 thread at a time

另外,如果您不想使用内容管理协议,可以 直接调用acquirerelease

进程间读写锁

在某些情况下,您需要支持无限数量的读锁, 但只有一个写锁。例如,假设您正在处理 通过改变格式和替换数据(完全 当然是假设的:微笑:)。

您希望数据的任何使用者获得一个读锁。这会 防止更改进程获取写锁,直到 消费者已完成。同样,消费者也无法 获取读锁,直到更改过程移除写锁。

使用者将阻塞,直到锁可用,或者在 指定的timeout(默认值为1s),此时 kazoo.LockTimeout已筹集。

fromkazoo.clientimportKazooClientfromkazuratorimportReadWriteLockdefmain():client=KazooClient(hosts="YOUR_ZK_CONNECT_STRING_HERE")client.start()# can optionally supply `timeout` kwarg as welllock=ReadWriteLock(client,"/some/path")withlock.write_lock:# block until write_lock is available# do your thread-safe thing herewithlock.read_lock:# block until write_lock is gone# do your thread-safe thing hereclient.stop()

开发

  • 克隆此回购协议并pip install -r requirements.txt
  • 运行测试script/test nosetests

运行测试将生成Docker容器来运行Zookeeper。它 将在运行结束时自动关闭

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在Salesforce中查询自定义对象?   RichFaces 4中的java ExtendedDataTable:数据模型处理   java Android类层次结构和带有片段的接口   java如何在文件中保存JLabel的颜色/大小?   java编辑类中的返回值而不修改类本身?   安卓如何替换字符串java中的ï»   1.3.7.发布>1.4.1。发布| java。lang.NoSuchMethodError:org。springframework。靴子建设者SpringApplicationBuilder。展示横幅   java列表保存在模型中,而不在setter中进行设置   java如何打开一个窗口。windows中的ks文件?   Java HashMap获取值(其中大部分值)   vps的javascript Websocketurl?   使用byte buddy或某些库进行java评测   java Dom4j获取单节点文本值