python - Linux 上 Python 中的系统范围互斥锁

标签 python linux mutex

有没有什么简单的方法可以在 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/

相关文章:

c - 尽快检测变量变化

java - 使用语言启发式检查

python - 名为断言的函数在模拟导入类上失败

python - 禁用 Python 3.2 资源警告

linux - 使用目录名称作为模式递归重命名数百个文件

linux - 经过一定时间后释放字符驱动程序中的互斥量

python - 拆分数字和单词 pandas 保留索引

linux - 连接到与我无法控制的路由器相连的 Raspberry PI

linux - Shell 脚本在可配置的小时或天数后压缩 "my_dir"目录中的所有日志文件

我可以使用单个 "pthread_mutexattr_t"属性来初始化两个不同的互斥量吗?