Package: zc.lockfile
The zc.lockfile package provides a basic portable implementation of
interprocess locks using lock files.  The purpose if not specifically
to lock files, but to simply provide locks with an implementation
based on file-locking primitives.  Of course, these locks could be
used to mediate access tootherfiles.  For example, the ZODB file
storage implementation uses file locks to mediate access to
file-storage database files.  The database files and lock file files
are separate files.ContentsDetailed DocumentationLock file supportHostname in lock fileChange History3.0.post1 (2023-02-28)3.0 (2023-02-23)2.0 (2019-08-08)1.4 (2018-11-12)1.3.0 (2018-04-23)1.2.1 (2016-06-19)1.2.0 (2016-06-09)1.1.0 (2013-02-12)1.0.2 (2012-12-02)1.0.1 (2012-11-30)1.0.0 (2008-10-18)1.0.0b1 (2007-07-18)Detailed DocumentationLock file supportThe ZODB lock_file module provides support for creating file system
locks.  These are locks that are implemented with lock files and
OS-provided locking facilities.  To create a lock, instantiate a
LockFile object with a file name:>>> import zc.lockfile
>>> lock = zc.lockfile.LockFile('lock')If we try to lock the same name, we’ll get a lock error:>>> 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 fileTo release the lock, use it’s close method:>>> lock.close()The lock file is not removed.  It is left behind:>>> import os
>>> os.path.exists('lock')
TrueOf course, now that we’ve released the lock, we can create it again:>>> lock = zc.lockfile.LockFile('lock')
>>> lock.close()Hostname in lock fileIn a container environment (e.g. Docker), the PID is typically always
identical even if multiple containers are running under the same operating
system instance.Clearly, inspecting lock files doesn’t then help much in debugging. To identify
the container which created the lock file, we need information about the
container in the lock file. Since Docker uses the container identifier or name
as the hostname, this information can be stored in the lock file in addition to
or instead of the PID.Use thecontent_templatekeyword argument toLockFileto specify a
custom lock file content format:>>> lock = zc.lockfile.LockFile('lock', content_template='{pid};{hostname}')
>>> lock.close()If you now inspected the lock file, you would see e.g.:$ cat lock123;myhostnameChange History3.0.post1 (2023-02-28)Addpython_requirestosetup.pyto prevent installing on not
supported old Python versions.3.0 (2023-02-23)Add support for Python 3.9, 3.10, 3.11.Drop support for Python 2.7, 3.5, 3.6.Drop support for deprecatedpython setup.py test.2.0 (2019-08-08)Extracted newSimpleLockFilethat removes implicit behavior
writing to the lock file, and instead allows a subclass to define
that behavior.
(#15)SimpleLockFileand thusLockFileare now new-style classes.
Any clients relying onLockFilebeing an old-style class will
need to be adapted.Drop support for Python 3.4.Add support for Python 3.8b3.1.4 (2018-11-12)Claim support for Python 3.6 and 3.7.Drop Python 2.6 and 3.3.1.3.0 (2018-04-23)Stop logging failure to acquire locks. Clients can do that if they wish.Claim support for Python 3.4 and 3.5.Drop Python 3.2 support because pip no longer supports it.1.2.1 (2016-06-19)Fixed: unlocking and locking didn’t work when a multiprocessing
process was running (and presumably other conditions).1.2.0 (2016-06-09)Added the ability to include the hostname in the lock file content.Code and ReST markup cosmetics.
[alecghica]1.1.0 (2013-02-12)Added Trove classifiers and made setup.py zest.releaser friendly.Added Python 3.2, 3.3 and PyPy 1.9 support.Removed Python 2.4 and Python 2.5 support.1.0.2 (2012-12-02)Fixed: the fix included in 1.0.1 caused multiple pids to be written
to the lock file1.0.1 (2012-11-30)Fixed: when there was lock contention, the pid in the lock file was
lost.Thanks to Daniel Moisset reporting the problem and providing a fix
with tests.Added test extra to declare test dependency onzope.testing.Using Python’sdoctestmodule instead of depreactedzope.testing.doctest.1.0.0 (2008-10-18)Fixed a small bug in error logging.1.0.0b1 (2007-07-18)Initial release