Skip to content

Inter thread locks

Fasteners inter-thread locks were build specifically for the needs of oslo.concurrency project and thus have a rather peculiar API. We do not recommend using it fully, and it is hence not documented (but maintained until the end of time).

Instead, we recommend limiting the use of fasteners inter-thread readers writer lock to the basic API:

import fasteners

# for threads
rw_lock = fasteners.ReaderWriterLock()

with rw_lock.write_lock():
    ...  # write access

with rw_lock.read_lock():
    ...  # read access

(Lack of) Features

Fasteners inter-thread readers writer lock is

  • not upgradeable. An attempt to get a reader's lock while holding a writer's lock (or vice versa) will raise an exception.

  • reentrant (!). You can acquire (and correspondingly release) the lock multiple times.

  • has writer preference. Readers will queue after writers and pending writers.

Different thread creation mechanisms

If your threads are created by some other means than the standard library threading module, you may need to provide corresponding thread identification and synchronisation functions to the ReaderWriterLock.

Eventlet

In particular, in case of eventlet threads, you should monkey_patch the stdlib threads with eventlet.monkey_patch(tread=True) and initialise the ReaderWriterLock as ReaderWriterLock(current_thread_functor=eventlet.getcurrent).