Skip to main content

A python implementation of the three Reader-Writer problems.

Project description

Reader Writer Lock

A python implementation of a solution for the three Reader-Writer problems.

repo status Active Build Status Coverage Status BugTracker

Python Version Pypi Version

Code size in bytes License

Downloads Downloads Downloads pyReaderWriterLock_repo_star

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 details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

readerwriterlock-1.0.9.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

readerwriterlock-1.0.9-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file readerwriterlock-1.0.9.tar.gz.

File metadata

  • Download URL: readerwriterlock-1.0.9.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.5

File hashes

Hashes for readerwriterlock-1.0.9.tar.gz
Algorithm Hash digest
SHA256 b7c4cc003435d7a8ff15b312b0a62a88d9800ba6164af88991f87f8b748f9bea
MD5 8ab86382fba7da8b7c88a1b5e7cec8e6
BLAKE2b-256 a4b96b7c390440ec23bf5fdf33e76d6c3b697a788b983c11cb2739d6541835d6

See more details on using hashes here.

File details

Details for the file readerwriterlock-1.0.9-py3-none-any.whl.

File metadata

  • Download URL: readerwriterlock-1.0.9-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.5

File hashes

Hashes for readerwriterlock-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 8c4b704e60d15991462081a27ef46762fea49b478aa4426644f2146754759ca7
MD5 28d873dc6351b29a2ca9ce1e020adffa
BLAKE2b-256 c25a2f2e7fc026d5e64b5408aa3fbe0296a6407b8481196cae4daacacb3a3ae0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page