使用DB(MySQL/Postgres)为Django提供分布式锁。

django-database-locks的Python项目详细描述


testsTest coverage statusCurrent version on PyPimonthly downloadsPyPI - Python VersionPyPI - Django Version

使用数据库(MySQL/Postgres)的Django分布式锁

考虑到Percona集群不支持MySQL锁的限制,这个应用程序使用select\u for_update()实现锁(行锁)。在

安装

pip install django-database-locks

使用

django数据库锁公开了一个contextmanager和锁定的修饰符。在

锁定的修饰符将包装django管理命令(属于的子类django.core.management公司.base.base命令)或任何具有锁的函数contextmanager:

fromdjango.core.management.baseimportBaseCommandfromdatabase_locksimportlocked@lockedclassCommand(BaseCommand):...defhandle(self,*args,**options):self.stdout.write('Got the lock')
^{pr2}$
fromdatabase_locksimportlockclassSomeClass:defnon_locked(self):passdeflocked(self):withlock():print('got lock')

文件

锁定锁定的具有相同的可选参数:

:paramlock_name:uniquenameinDBforthisfunction:paramtimeout:numbersofsecondstowaittoacquirelock:paramlock_ttl:expirationtimerofthelock,inseconds(settoNonetoinfinite):paramlocked_by:owneridforthelock(iflockisactivebutowneristhesame,returnsacquired):paramauto_renew:ifsettoTruewillre-acquirelock(for`lock_ttl`seconds)before`lock_ttl`isover.auto_renewthreadwillraiseKeyboardInterruptonthemainthreadincasere-acquiringfails:paramretry:retryevery`retry`secondsacquiringuntilsuccessful.settoNoneor0todisable.:paramlost_lock_cb:callbackfunctionwhenlockislost(whenre-acquiring).defaultstoraisingLockException

您还可以在项目中指定以下选项设置.py

  • DATABASE_LOCKS_STATUS_FILE:将使用锁状态更新的文件(默认值None)。当您有多个共享锁进程时非常有用,可以快速检查哪个进程拥有锁。在
  • DATABASE_LOCKS启用:设置为False全局禁用锁(默认True

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

推荐PyPI第三方库


热门话题
Java扫雷游戏的算法问题。游戏开始时隐藏地雷?   struts2的java迭代器标记   JavaFX如何创建精简菜单栏?   java从SQLite数据库获取字符串并检查是否等于变量不起作用   java如何检查移动数据连接   一旦我将Runnable传递给另一个线程中Swing的invokeAndWait,java就无法停止它   Java中每个键的多线程线程池   java没有可用的EjbContext   组织的java例外初始化错误。springframework。网状物util。UriComponentsBuilder。Android上的newInstance   java GWT CSS GUI通知用户浏览器问题   多线程一个Java编码程序,它读取一个巨大的CSV文件的行   java如何以编程方式打开特定应用程序的Android备份屏幕   java创建一个由10个整数组成的数组,并用1到6之间的随机数填充它   java如何将堆栈传递到方法中   java如何为注解@CurrentUser发送未经授权的响应   java访问switch语句中的对象   java如何正确扩展类   java DropboxAPI入门,未找到类