当前位置: 首页 > 面试题库 >

Linux上的Python中的系统范围互斥

晁文斌
2023-03-14
问题内容

有什么简单的方法可以在Linux上的Python中使用系统范围的互斥锁?“全系统”是指互斥体将由一组Python 进程使用
;这与传统互斥锁相反,传统互斥锁由同一进程中的一组 线程 使用。

编辑:我不确定Python的multiprocessing软件包是我所需要的。例如,我可以在两个不同的解释器中执行以下命令:

from multiprocessing import Lock
L = Lock()
L.acquire()

当我在两个单独的解释器中同时执行这些命令时,我希望其中之一挂起。相反,它们都没有挂起。看来他们没有获得相同的互斥量。


问题答案:

Unix的“传统”答案是使用文件锁。您可以lockf(3)用来锁定文件的各个部分,以便其他进程无法对其进行编辑。一个非常普遍的滥用是将其用作进程之间的互斥体。python等效项是fcntl.lockf。

传统上,您将锁定过程的PID写入锁定文件,以使由于持有锁定而死的进程导致的死锁是可识别和可修复的。

因为您的锁位于全局名称空间(文件系统)中,并且可用于所有进程,所以这可以满足您的所需。这种方法还具有非Python程序可以参与锁定的好处。缺点是您需要一个放置该锁文件的位置;另外,某些文件系统实际上并没有正确锁定,因此存在无提示无法实现排除的风险。你赢了一些,你输了一些。



 类似资料:
  • 问题内容: 在Linux(X-windows)上安装键盘挂钩以触发某些应用程序的最佳方法是什么?不管运行哪个窗口管理器,有没有办法做到这一点?这样做的想法是,当按某些键(类似于Google桌面与Ctrl- Ctrl的方式)时,会调用一个应用程序(或使其成为前台)。 问题答案: 在根窗口上,是xbindkey的工作方式。不过,请谨慎使用一些其他方法来杀死争夺者,这很烦人,不得不进入某个地方进入自己的

  • 问题内容: 我给自己做了一个小模块,碰巧经常使用它。每当我需要它时,只需将其复制到要使用的文件夹中即可。由于我很懒,所以我想安装它,以便可以从任何地方调用它,即使是交互式提示也是如此。因此,我读了一些有关在此处安装的信息,并得出结论,我需要将文件复制到/usr/local/lib/python2.7/site- packages。但是,这似乎没有任何作用。 有人知道我需要将模块复制到哪里才能在系统

  • 问题内容: 在Java中,我们使用System.setProperty()方法来设置一些系统属性。根据本文的介绍,使用系统属性有些棘手。 System.setProperty()可能是一个邪恶的调用。 这是100%线程敌对的 它包含超全局变量 当这些变量在运行时发生神秘变化时,调试非常困难。 我的问题如下。 系统属性的范围如何?它们是针对每个虚拟机专用还是具有“超全局性”,在每个虚拟机实例上共享相

  • 在ubuntu目录中,/etc/profile.d允许我从软件包中配置bash(我指的是*.deb)。但它不适用于交互式非登录shell。如何向这种类型的shell添加一些东西,这将是系统范围的? 因为我需要deb包,所以我不能修改/etc/bash.bashrc(或者我能以某种方式修改吗?)

  • 问题内容: 我正在实验室中运行Linux(Debian和Ubuntu)。用户名和组名由NIS和yp处理。我们有一些普通用户,每个人都可以访问该用户来运行实验,然后我们每个人都有自己的用户,此外还有一个共同的组,我们都是该组的成员。 如何使用户/组读取/写入(/可执行)共享驱动器(NFS)上的所有文件和目录?基本上我想要的是 或等效地。 但是运行以上命令只能修复文件夹中的当前文件,而umask仅适用

  • 问题内容: 我正在重新设计可能多次启动的Java可执行文件,并且希望该过程一次执行一次。在C#中,我将使用具名/系统的Mutex来做到这一点,但这在Java中似乎是不可能的。如何实现此功能? 问题答案: 您可以使用对文件系统上文件的独占访问来实现类似的行为。我认为您所提到的没有类似之处。 例子 Java编程[存档]-以互斥锁打开文件 java.nio.channels.FileLock