【问题标题】:How to Create a Mutex for a Single Instance Python Application如何为单实例 Python 应用程序创建互斥锁
【发布时间】:2011-12-08 04:15:39
【问题描述】:

我一直在使用以下配方来只允许我的应用程序的单个实例: http://code.activestate.com/recipes/474070-creating-a-single-instance-application/

配方使用一个“mutexname”变量,其中填充了一些互斥值。如果我想创建自己独特的“互斥锁”,我该怎么做?另外,这个食谱是如何工作的?谁能解释一下?

谢谢

【问题讨论】:

    标签: python instance mutex


    【解决方案1】:

    配方使用win32 api函数CreateMutex创建一个命名互斥体。互斥锁是一个系统对象,存在于您的应用程序进程之外。当使用已存在的名称调用 CreateMutex 时,GetLastError 返回 ERROR_ALREADY_EXISTS。配方检查此返回值,如果是则退出。您应该更改配方以使用不同的字符串作为 mutexname。选择其他人不太可能锁定的东西,因为如果他们这样做,您的应用程序将无法启动。

    【讨论】:

    • 字符串可以是任何值或长度吗?另外,它必须是ASCII字符,还是也可以由字节组成?
    • 我真的不知道您要在“ascii 字符”和“字节”之间做出什么区分。在 Python 2.x 中,有两种东西可以称为字符串:str,它实际上是一个字节序列,unicode,它是一个字符序列(Unicode 代码点)。配方显示了str 的使用,因为默认情况下 Windows API 是非 Unicode。 CreateMutex 的 Windows API 文档声称:“名称仅限于 MAX_PATH 字符,并且可以包含除反斜杠路径分隔符 () 之外的任何字符。名称比较区分大小写。”
    • 我在 Python 2.7 中使用了类似的代码,现在使用 Python 3.7 我没有收到 ERROR_ALREADY_EXISTS 错误。有人有同样的问题吗?
    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2011-07-19
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多