Skip to main content

Similar Libraries ~ Installation ~ Documentation ~ Contributions ~ License

This package contains a single module, which implements a platform independent file lock in Python, which provides a simple way of inter-process communication:

from filelock import Timeout, FileLock

lock = FileLock("high_ground.txt.lock")
with lock:
    open("high_ground.txt", "a").write("You were the chosen one.")

Don’t use a FileLock to lock the file you want to write too, instead create a separate .lock file as shown above.

https://github.com/benediktschmitt/py-filelock/blob/master/example/example.gif

Animated example

Similar libraries

Perhaps you are looking for something like

Installation

py-filelock is available via PyPi:

$ pip3 install filelock

Documentation

The documentation for the API is available on readthedocs.org.

Examples

A FileLock is used to indicate another process of your application that a resource or working directory is currently used. To do so, create a FileLock first:

from filelock import Timeout, FileLock

file_path = "high_ground.txt"
lock_path = "high_ground.txt.lock"

lock = FileLock(lock_path, timeout=1)

The lock object supports multiple ways for acquiring the lock, including the ones used to acquire standard Python thread locks:

with lock:
    open(file_path, "a").write("Hello there!")

lock.acquire()
try:
    open(file_path, "a").write("General Kenobi!")
finally:
    lock.release()

The acquire() method accepts also a timeout parameter. If the lock cannot be acquired within timeout seconds, a Timeout exception is raised.:

try:
    with lock.acquire(timeout=10):
        open(file_path, "a").write("I have a bad feeling about this.")
except Timeout:
    print("Another instance of this application currently holds the lock.")

The lock objects are recursive locks, which means that once acquired, they will not block on successive lock requests:

def cite1():
    with lock:
        open(file_path, "a").write("I hat it when he does that.")

def cite2():
    with lock:
        open(file_path, "a").write("You don't want to sell me death sticks.")

# The lock is acquired here.
with lock:
    cite1()
    cite2()

# And released here.

FileLock vs SoftFileLock

The FileLock is platform dependent while the SoftFileLock is not. Use the FileLock if all instances of your application are running on the same host and a SoftFileLock otherwise.

The SoftFileLock only watches the existence of the lock file. This makes it ultra portable, but also more prone to dead locks if the application crashes. You can simply delete the lock file in such cases.

Contributions

Contributions are always welcome. Never hesitate to open a new issue.

License

This package is public domain.

Metadata

Release files for filelock 3.0.2

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

Source distribution (sdist)

Source distribution for filelock 3.0.2
File Size Uploaded
filelock-3.0.2.tar.gz 6.5 kB Details

Release files / filelock-3.0.2.tar.gz

Download URL filelock-3.0.2.tar.gz
Size 6.5 kB
Tags Source
SHA-256 checksum
How to use checksums
3009bc9169140a731a0b1d0fd8943d9a4a58a530cb63e103744a2c1ca73eef77
BLAKE2b-256 checksum
How to use checksums
5e3e1364b06500de363787520b78984b3df0f370a277b6b568bbcf6151ce55bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

4.0.9

2 release files

4.0.8

2 release files

4.0.7

2 release files

4.0.6

2 release files

4.0.5

2 release files

4.0.4

2 release files

4.0.3

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.32.7

2 release files

3.32.5

2 release files

3.32.4

2 release files

3.32.3

2 release files

3.32.2

2 release files

3.32.0

2 release files

3.31.2

2 release files

3.31.1

2 release files

3.31.0

2 release files

3.30.3

2 release files

3.30.2

2 release files

3.30.1

2 release files

3.30.0

2 release files

3.29.4

2 release files

3.29.3

2 release files

3.29.2

2 release files

3.29.0

2 release files

3.28.0

2 release files

3.25.2

2 release files

3.24.3

2 release files

3.24.2

2 release files

3.24.1

2 release files

3.24.0

2 release files

3.23.0

2 release files

3.22.0

2 release files

3.21.2

2 release files

3.21.1

2 release files

3.21.0

2 release files

3.20.4

2 release files

3.20.1

2 release files

3.19.1

2 release files

3.18.0

2 release files

3.17.0

2 release files

3.16.1

2 release files

3.15.4

2 release files

3.15.3

2 release files

3.15.2

2 release files

3.15.1

2 release files

3.15.0

2 release files

3.14.0

2 release files

3.13.3

2 release files

3.13.2

2 release files

3.13.1

2 release files

3.13.0

2 release files

3.12.4

2 release files

3.12.3

2 release files

3.12.2

2 release files

3.12.1

2 release files

3.12.0

2 release files

3.10.7

2 release files

3.10.6

2 release files

3.10.5

2 release files

3.10.4

2 release files

3.10.3

2 release files

3.10.2

2 release files

3.10.1

2 release files

3.10.0

2 release files

3.9.1

2 release files

3.9.0

2 release files

3.8.2

2 release files

3.8.1

2 release files

3.8.0

2 release files

3.7.1

2 release files

3.7.0

2 release files

3.6.0

2 release files

3.5.1

2 release files

3.5.0

2 release files

3.4.2

2 release files

3.4.1

2 release files

3.4.0

2 release files

3.3.2

2 release files

3.3.1

2 release files

3.3.0

2 release files

3.2.1

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.12

2 release files

3.0.9

2 release files

3.0.8

2 release files

3.0.6

2 release files

3.0.4

1 release file

3.0.3

1 release file

This release

3.0.2 This release

1 release file

3.0.0

1 release file

2.0.13

1 release file

2.0.12

1 release file

2.0.11

1 release file

2.0.10

1 release file

2.0.9

1 release file

2.0.8

1 release file

2.0.7

1 release file

2.0.6

1 release file

2.0.5

1 release file

2.0.4

1 release file

2.0.1

1 release file

2.0.0

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.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