readerwriterlock 1.0.9

Creator: railscoder56

Last updated:

0 purchases

readerwriterlock 1.0.9 Image
readerwriterlock 1.0.9 Images

Languages

Categories

Add to Cart

Description:

readerwriterlock 1.0.9

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 [email protected]

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.