数据库锁定
django-db-locking的Python项目详细描述
用法
最简单的用法是将其用作上下文管理器:
with NonBlockingLock.objects.acquire_lock(obj=model_obj): model_obj.do_something()
或者您可以自己跟踪锁:
try: lock = NonBlockingLock.objects.acquire_lock(obj=model_obj) except AlreadyLocked: return False model_obj.do_something() lock.release()
如果没有django模型,或者希望能够指定锁名称 你自己也可以这样做:
# this will raise AlreadyLocked, if it's locked lock = NonBlockingLock.objects.acquire_lock(lock_name='my_lock') do_something() lock.release()
请注意,锁可能会自动过期。有一个lock_max_age设置,您可以在其中为整个django代码库中的锁指定默认的锁释放值。通过设置max_age参数,可以覆盖每个锁的该值。
测试
您可以使用
tox
释放量
- v2.0.0版:
- 合并master和pre-django-1.8分支 删除有利于芹菜任务的管理命令
- 第1.2.1版:
- 修复迁移到UuidField进行Postgres时出现的问题
- v1.2.0版:
- 将id移动到uuidfield,添加代码质量检查和ci
- v1.1.0版:
- 将模型重命名为nonblockinglock并添加其他功能
- v1.0.1版:
- 更正的测试和代码清理
- v1.0.0版:
- 初始释放。