基本进程间锁
项目描述
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的补充或替代。
使用LockFile的content_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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | adb2ee6d9e6a2333c91178dcb2c9b96a5744c78edb7712dc784a7d75648e81ec |
|
MD5 | 5e902492de505a0f98e49b1e31cf2bc2 |
|
BLAKE2b-256 | 5b83a5432aa08312fc834ea594473385c005525e6a80d768a2ad246e78877afd |
zc.lockfile-3.0.post1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ddb2d71088c061dc8a5edbaa346b637d742ca1e1564be75cb98e7dcae715de19 |
|
MD5 | 2c9c46e3c55c1148c49e551b87ee1706 |
|
BLAKE2b-256 | a7aa47f00f32605177a945f3a1b36a1b2bb9a39260566541280fcee27cbff5cf |