Native process-shared rwlock support for Python
A reader-writer lock for Python that can (must, actually) be used for locking across multiple Python processes.
The rationale and initial implementation of the project can be found in the accompanying blog post.
This package is available on PyPi, so you can install the latest stable
release with a simple
$ pip install prwlock
All you have to do is import the module and start using it. There is no need for initialization. Therefore, a code block such as the one below is enough to get an RWLock instance.
from prwlock import RWLock rwlock = RWLock()
The RWLock itself is pickleable and, therefore, can be passed around to child processes, such as in the code block below.
from __future__ import print_function import os import time from multiprocessing import Pool from prwlock import RWLock def f(rwlock): for i in range(2): print(os.getpid(), 'Acquiring read lock') rwlock.acquire_read() print(os.getpid(), 'Sleeping for a while') time.sleep(1) print(os.getpid(), 'Releasing lock') rwlock.release() time.sleep(.1) r = RWLock() children = 20 pool = Pool(processes=children) for child in range(children): pool.apply_async(f, [r])
prwlock also supports context managers using the
with syntax. The code
block below displays one possible way of using it.
from prwlock import RWLock # First you instantiate the lock rwlock = RWLock() # Now you can lock it in read or in write mode with rwlock.reader_lock(): # If this executes, then reader lock access has been acquired print('Reading data') # Likewise, you can lock in writer mode with: with rwlock.writer_lock(): print('Writing data')
from prwlock import RWLock, instead of the slightly awkward
from prwlock.prwlock import RWLockmethod.
PTHREAD_PROCESS_SHAREDconstant for Mac OS X. Also added a check to prevent double destruction of the underlying lock on Mac OS X.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|File Name & Checksum SHA256 Checksum Help||Version||File Type||Upload Date|
|prwlock-0.4.0-py2-none-any.whl (15.5 kB) Copy SHA256 Checksum SHA256||py2||Wheel||Oct 18, 2016|
|prwlock-0.4.0-py3-none-any.whl (15.5 kB) Copy SHA256 Checksum SHA256||py3||Wheel||Oct 18, 2016|
|prwlock-0.4.0.tar.gz (10.4 kB) Copy SHA256 Checksum SHA256||–||Source||Oct 18, 2016|