readerwriterlock

1.0.9last stable release 4 years ago
Complexity Score
Low
Open Issues
N/A
Dependent Projects
19
Weekly Downloadsglobal
43,583

License

  • MIT
    • Yesattribution
    • Permissivelinking
    • Permissivedistribution
    • Permissivemodification
    • Nopatent grant
    • Yesprivate use
    • Permissivesublicensing
    • Notrademark grant

Downloads

Readme

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

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

  1. Instantiate an instance of the chosen RWLock class:
from readerwriterlock import rwlock
a = rwlock.RWLockFairD()
  1. Generate read locks and write locks using the following methods:
      a_reader_lock = a.gen_rlock()

      a_writer_lock = a.gen_wlock()
  1. 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

Dependencies

CVE IssuesActive
0
Scorecards Score
2.50
Test Coverage
No Data
Follows Semver
Yes
Github Stars
89
Dependenciestotal
1
DependenciesOutdated
0
DependenciesDeprecated
0
Threat Modelling
No Data
Repo Audits
No Data

Learn how to distribute readerwriterlock in your own private PyPI registry

pip install readerwriterlock
Processing...
Done

10 Releases

PyPI on Cloudsmith

Getting started with PyPI on Cloudsmith is fast and easy.