Python中的分布式锁,类似于https://github.com/vaidik/sherlock同时支持异步

shylock的Python项目详细描述


https://app.fossa.io/api/projects/git%2Bgithub.com%2Flietu%2Fshylock.svg?type=shieldhttps://travis-ci.org/lietu/shylock.svg?branch=masterhttps://img.shields.io/badge/code%20style-black-000000.svghttps://codecov.io/gh/lietu/shylock/branch/master/graph/badge.svghttps://sonarcloud.io/api/project_badges/measure?project=lietu_shylock&metric=alert_statusGitHub issuesPyPI - DownloadsPyPIPyPI - Python Versionhttps://img.shields.io/badge/License-BSD%203--Clause-blue.svg

Python上的分布式锁,支持异步

这是什么?在

当您有一个分布式系统(如任何API)并且您希望确保数据的一致性并防止竞争条件时,就需要锁。实现它们的方法有很多种,这个库旨在提供一些更好的方法的简单访问。在

该库主要用于异步代码,但也支持正常的同步使用。在

当前支持的后端:

  • MongoDB(使用唯一索引+ttl索引以确保一致性和安全性)
  • ArangoDB(使用唯一索引+ttl索引以确保一致性和安全性)

可以很容易地扩展到其他存储系统。在

许可证

许可证很重要。本项目本身使用BSD 3-clause许可证,但例如Mongodb Motor library和它使用的其他此类库可能有自己的许可证。在

有关详细信息,请查看LICENSE-文件。在

入门

通过pip/pipenv/poetry将shylock添加到项目中

# MongoDB asyncio
pip install shylock[motor]# MongoDB
pip install shylock[pymongo]# ArangoDB asyncio
pip install shylock[aioarangodb]# ArangoDB
pip install shylock[python-arango]

为了最容易使用,您应该在应用程序启动逻辑中为夏洛克配置默认后端,然后使用AsyncLock类来处理您的锁定需求。在

^{pr2}$

或者是不需要asyncio支持的代码的Lock

frompymongoimportMongoClientfromshylockimportconfigure,Lock,ShylockPymongoBackendCONNECTION_STRING="mongodb://your-connection-string"client=MongoClient(CONNECTION_STRING)configure(ShylockPymongoBackend.create(client,"projectdb"))defuse_lock():withLock("my-lock"):# The lock is now acquired, and will be automatically releaseddo_something()defanother_lock_use():lock=Lock("my-lock")try:lock.acquire()do_something()finally:lock.release()deftime_sensitive_code():lock=Lock("my-lock")try:locked=lock.acquire(block=False)iflocked:do_something()finally:iflocked:lock.release()

您还可以查看examples,它还展示了如何在ArangoDB中使用夏洛克。在

贡献

此项目在GitHub上运行,使用此处的问题跟踪和拉取请求。如果你想投稿,请随意在这里submit issues(包括功能请求)或pr。在

在本地测试更改python setup.py develop是一个很好的运行方法,您可以在以后python setup.py develop --uninstall(您可能还需要使用--user标志)。在

https://app.fossa.io/api/projects/git%2Bgithub.com%2Flietu%2Fshylock.svg?type=large

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

推荐PyPI第三方库


热门话题
未处理java Google PubSub-resent消息   java CannotAcquireLockException+LockAcquisitionException   atlassian fisheye如何处理“C:\Program Files\Java\jre7\bin\server\JVM.dll”中缺少“服务器”JVM的问题   jboss 6.3 eap linux环境中ear部署中的java问题   java SQL顺序字符串主键   java ascii shift程序几乎适用于整个字符串   java中excel工作表中的一条记录插入多条记录所需的sql逻辑   java这个方法如何计算Rational(1)。hashCode()?1的分子或分母本身就是1   java为什么在循环中的数组中分配引用后会出现NullPointerException?   java Seam 2中内置工厂的优势是什么   远程运行Java项目的eclipse   标记化Java中的标记化源代码   java从大文件中读取前缀后的值   java使用EntityManager调用PostgreSQL过程   java阅读行每隔一行跳过一行