有没有什么简单的方法可以在 Linux 上的 Python 中使用系统范围的互斥锁? “系统范围”是指互斥锁将被一组 Python 进程使用;这与传统的互斥锁不同,后者由同一进程中的一组线程使用。
编辑:我不确定 Python 的 multiprocessing
包是我需要的。例如,我可以在两个不同的解释器中执行以下操作:
from multiprocessing import Lock
L = Lock()
L.acquire()
当我在两个单独的解释器中同时执行这些命令时,我希望它们中的一个挂起。相反,两者都没有挂起;看来他们没有获得相同的互斥锁。
最佳答案
“传统”的 Unix 答案是使用文件锁。您可以使用 lockf(3)
锁定文件的各个部分,以便其他进程无法编辑它;一个非常常见的滥用行为是将其用作进程之间的互斥体。 python 等价物是fcntl.lockf .
传统上,您将锁定进程的 PID 写入锁定文件,这样由于进程在持有锁定时死亡而导致的死锁是可识别和可修复的。
这会让你得到你想要的,因为你的锁在一个全局命名空间(文件系统)中并且可以被所有进程访问。这种方法还具有非 Python 程序可以参与锁定的好处。缺点是你需要一个地方来存放这个锁文件;此外,一些文件系统实际上并没有正确锁定,因此它可能会默默地无法实现排除。你赢了一些,你也输了一些。
关于python - Linux 上 Python 中的系统范围互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6931342/