Skip to main content

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 to other files. 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.

Detailed Documentation

Lock file support

The 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 file

To 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')
True

Of course, now that we’ve released the lock, we can create it again:

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

Hostname in lock file

In 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 the content_template keyword argument to LockFile to 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 lock

123;myhostname

Change History

4.0 (2025-09-18)

  • Replace pkg_resources namespace with PEP 420 native namespace.

  • Add support for Python 3.12, 3.13.

  • Drop support for Python 3.7, 3.8.

3.0.post1 (2023-02-28)

  • Add python_requires to setup.py to 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 deprecated python setup.py test.

2.0 (2019-08-08)

  • Extracted new SimpleLockFile that removes implicit behavior writing to the lock file, and instead allows a subclass to define that behavior. (#15)

  • SimpleLockFile and thus LockFile are now new-style classes. Any clients relying on LockFile being 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 file

1.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 on zope.testing.

  • Using Python’s doctest module instead of depreacted zope.testing.doctest.

1.0.0 (2008-10-18)

  • Fixed a small bug in error logging.

1.0.0b1 (2007-07-18)

  • Initial release

Release files for zc.lockfile 4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for zc.lockfile 4.0
File Size Uploaded
zc_lockfile-4.0.tar.gz 11.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for zc.lockfile 4.0
File Interpreter ABI Platform
zc_lockfile-4.0-py3-none-any.whl Python 3 none any Details

Total release size:20.1 kB

Release files / zc_lockfile-4.0.tar.gz

Download URL zc_lockfile-4.0.tar.gz
Size 11.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d3ab0f53974296a806db3219b9191ba0e6d5cbbd1daa2e0d17208cb9b29d2102
BLAKE2b-256 checksum
How to use checksums
109a2fef89272d98b799e4daa50201c5582ec76bdd4e92a1a7e3deb74c52b7fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.11

Release files / zc_lockfile-4.0-py3-none-any.whl

Download URL zc_lockfile-4.0-py3-none-any.whl
Size 9.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aa3aa295257bebaa09ea9ad5cb288bf9f98f88de6932f96b6659f62715d83581
BLAKE2b-256 checksum
How to use checksums
3b7f3a614b65bc4b181578b1d50a78663ee02d5d2d3b859712f3d3597c8afe6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.11

Release history Release notifications | RSS feed

This release

4.0 This release

2 release files

3.0

2 release files

2.0

2 release files

1.4

1 release file

1.3.0

1 release file

1.2.1

1 release file

1.2.0

1 release file

1.1.0

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page