Python 中的命名重入/递归锁 (RLock)

wea*_*rog 5 python synchronization locking

Pythonmultiprocessing模块有一个用于可重入/递归锁的类:

from multiprocessing import RLock

l = RLock()
l.acquire()
l.acquire()
l.release()
l.release()
Run Code Online (Sandbox Code Playgroud)

这对于从公共父进程分叉的进程非常有用,因此可以共享相同的RLock对象。但是,对于具有独立进程的情况(例如:Web 服务器 + cron 作业),需要一个命名锁。不幸的是,RLock()不接受锁的名称参数。有没有允许做这样的事情的解决方案?

l = RLock('mylock')
l.acquire()
l.release()
Run Code Online (Sandbox Code Playgroud)

小智 1

查看oslo_concurrency.lockutils。它有一个lock上下文管理器和一个synchronized装饰器,两者都采用名称和其他方便的进程间友好参数。