Skip to main content

Native process-shared rwlock support for Python

Project description

https://coveralls.io/repos/trovao/prwlock/badge.svg?branch=master&service=github

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.

Installation

This package is available on PyPi, so you can install the latest stable release with a simple pip call:

$ pip install prwlock

Usage

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])

Changes

  • 0.2.0: Added support for RWLocks on Windows XP and above. Changed the API so that the lock can be imported as from prwlock import RWLock, instead of the slightly awkward from prwlock.prwlock import RWLock method.
  • 0.1.1: Fixed the value of the PTHREAD_PROCESS_SHARED constant for Mac OS X. Also added a check to prevent double destruction of the underlying lock on Mac OS X.
  • 0.1.0: Initial release

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
prwlock-0.2.0-py2-none-any.whl (11.8 kB) Copy SHA256 hash SHA256 Wheel py2 Jan 8, 2016
prwlock-0.2.0-py3-none-any.whl (11.8 kB) Copy SHA256 hash SHA256 Wheel py3 Jan 8, 2016
prwlock-0.2.0.tar.gz (7.5 kB) Copy SHA256 hash SHA256 Source None Jan 8, 2016

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page