single |
Fasteners
=========
[Documentation status]
[Downloads]
[Latest version]
Cross-platform locks for threads and processes.
🔩 Install
----------
`
pip install fasteners
`
🔩 Usage
--------
Lock for processes has the same API as the
[threading.Lock]
for threads:
```python
import fasteners
import threading
lock = threading.Lock() # for threads
lock = fasteners.InterProcessLock('path/to/lock.file') # for processes
with lock:
... # exclusive access
# or alternatively
lock.acquire()
... # exclusive access
lock.release()
```
Reader Writer lock has a similar API, which is the same for threads or
processes:
```python
import fasteners
rw_lock = fasteners.ReaderWriterLock() #
for threads
rw_lock = fasteners.InterProcessReaderWriterLock('path/to/lock.file') #
for processes
with rw_lock.write_lock():
... # write access
with rw_lock.read_lock():
... # read access
# or alternatively
rw_lock.acquire_read_lock()
... # read access
rw_lock.release_read_lock()
rw_lock.acquire_write_lock()
... # write access
rw_lock.release_write_lock()
```
🔩 Overview
-----------
Python standard library provides a lock for threads (both a reentrant one,
and a
non-reentrant one, see below). Fasteners extends this, and provides a lock
for
processes, as well as Reader Writer locks for both threads and processes.
Definitions of terms used in this overview can be found in the
[glossary].
The specifics of the locks are as follows:
### Process locks
The `fasteners.InterProcessLock` uses [fcntl] on Unix-like systems and
msvc [_locking] on Windows.
As a result, if used cross-platform it guarantees an intersection of their
features:
| lock | reentrant | mandatory |
|------|-----------|-----------|
| fcntl | ✘ | ✘ |
| _locking | ✔ | ✔ |
| fasteners.InterProcessLock | ✘ | ✘ |
The `fasteners.InterProcessReaderWriterLock` also uses fcntl on Unix-like
systems and
[LockFileEx] on Windows. Their
features are as follows:
| lock | reentrant | mandatory | upgradable | preference |
|------|-----------|-----------|------------|------------|
| fcntl | ✘ | ✘ | ✔ | reader |
|