跳转到主要内容

基本进程间锁

项目描述

zc.lockfile软件包提供了一个基于文件锁定原语的进程间锁的基本可移植实现。其目的不是为了锁定文件,而是为了提供一个基于文件锁定原语的锁的实现。当然,这些锁也可以用于管理对其他文件的访问。例如,ZODB文件存储实现使用文件锁来管理对文件存储数据库文件的访问。数据库文件和锁文件是独立的文件。

详细文档

锁文件支持

ZODB的lock_file模块提供了创建文件系统锁的支持。这些锁是通过锁文件和操作系统提供的锁定功能实现的。要创建一个锁,需要使用文件名实例化一个LockFile对象

>>> import zc.lockfile
>>> lock = zc.lockfile.LockFile('lock')

如果我们尝试锁定相同的名称,将会得到一个锁定错误

>>> import zope.testing.loggingsupport
>>> handler = zope.testing.loggingsupport.InstalledHandler('zc.lockfile')
>>> try:
...     zc.lockfile.LockFile('lock')
... except zc.lockfile.LockError:
...     print("Can't lock file")
Can't lock file

要释放锁,使用它的close方法

>>> lock.close()

锁文件不会被删除,它会被保留

>>> import os
>>> os.path.exists('lock')
True

当然,现在我们已经释放了锁,我们可以再次创建它

>>> lock = zc.lockfile.LockFile('lock')
>>> lock.close()

锁文件中的主机名

在容器环境(例如Docker)中,PID通常是相同的,即使有多个容器在同一个操作系统实例下运行。

显然,检查锁文件在调试时帮助不大。要识别创建锁文件的容器,我们需要在锁文件中有关容器的信息。由于Docker使用容器标识符或名称作为主机名,因此可以将此信息存储在锁文件中,作为PID的补充或替代。

使用LockFilecontent_template关键字参数来指定自定义的锁文件内容格式

>>> lock = zc.lockfile.LockFile('lock', content_template='{pid};{hostname}')
>>> lock.close()

如果你现在检查锁文件,你会看到例如:

$ cat lock

123;myhostname

变更历史

3.0.post1 (2023-02-28)

  • python_requires添加到setup.py中,以防止在不支持的旧Python版本上安装。

3.0 (2023-02-23)

  • 添加对Python 3.9、3.10、3.11的支持。

  • 停止对Python 2.7、3.5、3.6的支持。

  • 停止对过时的python setup.py test的支持。

2.0 (2019-08-08)

  • 提取了新的SimpleLockFile,它移除了写入锁文件的隐性行为,并允许子类定义该行为。(#15

  • SimpleLockFile和因此LockFile现在是新式类。任何依赖于LockFile是旧式类的客户端都需要进行适配。

  • 停止对Python 3.4的支持。

  • 添加对Python 3.8b3的支持。

1.4 (2018-11-12)

  • 声明支持Python 3.6和3.7。

  • 停止支持Python 2.6和3.3。

1.3.0 (2018-04-23)

  • 停止记录获取锁失败。客户端如果愿意可以自己处理。

  • 声明支持Python 3.4和3.5。

  • 停止支持Python 3.2,因为pip不再支持它。

1.2.1 (2016-06-19)

  • 修复:当多进程进程运行时(以及可能的其他条件),解锁和锁定不起作用。

1.2.0 (2016-06-09)

  • 添加了在锁文件内容中包含主机名的功能。

  • 代码和ReST标记美化。[alecghica]

1.1.0 (2013-02-12)

  • 添加了Trove分类器,并使setup.py zest.releaser友好。

  • 添加了Python 3.2、3.3和PyPy 1.9的支持。

  • 移除了Python 2.4和Python 2.5的支持。

1.0.2 (2012-12-02)

  • 修复:1.0.1中包含的修复导致多个pid被写入锁文件

1.0.1 (2012-11-30)

  • 修复:当存在锁竞争时,锁文件中的pid丢失。

    感谢Daniel Moisset报告问题并提供了带有测试的修复。

  • 添加了测试额外功能,以声明对zope.testing的测试依赖。

  • 使用Python的doctest模块而不是已废弃的zope.testing.doctest

1.0.0 (2008-10-18)

  • 修复了错误日志中的一个小错误。

1.0.0b1 (2007-07-18)

  • 初始版本

项目详情


下载文件

下载适用于您平台的应用文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

zc.lockfile-3.0.post1.tar.gz (10.2 kB 查看哈希值)

上传时间 源代码

构建分发

zc.lockfile-3.0.post1-py3-none-any.whl (9.8 kB 查看哈希值)

上传时间 Python 3

支持