Reader Writer Lock
A python implementation of a solution for the three Reader-Writer problems.
Not only does it implement the reader-writer problems, it is also compliant with the python lock interface which among others include support for timeout.
For reading about the theory behind the reader-writer problems refer to Wikipedia.
Installation
Install the python package readerwriterlock
python3 -m pip install -U readerwriterlock
Usage
- Choose a rwlock class base on your access priority need and feature need which is going to be use by the threads:
| Priority | +Speed | +Downgradable* |
|---|---|---|
| Reader priority (aka First readers-writers problem) | RWLockRead | RWLockReadD |
| Writer priority (aka Second readers-writers problem) | RWLockWrite | RWLockWriteD |
| Fair priority (aka Third readers-writers problem) | RWLockFair | RWLockFairD |
* Downgradable feature allows the locks to be atomically downgraded from being locked in write-mode to locked in read-mode
ⓘ Downgradable classes come with a theoretical ~20% negative effect on performance for acquiring and releasing locks.
- Instantiate an instance of the chosen RWLock class:
from readerwriterlock import rwlock
a = rwlock.RWLockFairD()
- Generate read locks and write locks using the following methods:
a_reader_lock = a.gen_rlock()
a_writer_lock = a.gen_wlock()
- Use the generated read/write locks to protect section in your code:
Pythonic usage example
with a.gen_rlock():
#Read stuff
with a.gen_wlock():
#Write stuff
Use case (Timeout) example
b = a.gen_wlock()
if b.acquire(blocking=True, timeout=5):
try:
#Do stuff
finally:
b.release()
Use case (Downgrade) example
b = a.gen_wlock()
if b.acquire():
try:
#Read/Write stuff
b = b.downgrade()
#Read stuff
finally:
b.release()
Live example
Refer to the file test_rwlock.py which has above 90% line coverage of rwlock.py.
The tests can be initiated by doing
make check.test.coverage
Contact
- Project: GitHub
- Éric Larivière ericlariviere@hotmail.com
Metadata
Release files for readerwriterlock 1.0.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| readerwriterlock-1.0.10.tar.gz | 16.8 kB | Without provenance | Details for readerwriterlock-1.0.10.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| readerwriterlock-1.0.10-py3-none-any.whl | Python 3 | none | any | Details for readerwriterlock-1.0.10-py3-none-any.whl |
Total release size: 27.0 kB
Release files / readerwriterlock-1.0.10.tar.gz
| Download URL | readerwriterlock-1.0.10.tar.gz |
|---|---|
| Size | 16.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0e803d17569f70700137cd91c4219d2bae718794a1b0da9fd44eb189e58786d
|
|
BLAKE2b-256 checksum How to use checksums |
d04aa9eb837332a2a5eb8ab3d500178eadbfbc28d1588f0221a3fa45ece60537
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / readerwriterlock-1.0.10-py3-none-any.whl
| Download URL | readerwriterlock-1.0.10-py3-none-any.whl |
|---|---|
| Size | 10.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
788c28ca2da19681e466609774252eb55a963286c6f7cf8ace13d0be21a69683
|
|
BLAKE2b-256 checksum How to use checksums |
629cd496912967d3c8d498e962f61a93bffc9304a0f09fd8e632a90a0b375d37
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Security for readerwriterlock 1.0.10
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.