Bases: object
A reader/writer lock.
New in version 0.4.
Returns if there are writers waiting to become the one writer.
Returns if the caller is one of the readers.
Returns if the caller is the active writer or a pending writer.
Returns whether the lock is locked by a writer or reader.
Context manager that grants a read lock.
Will wait until no active or pending writers.
Raises a RuntimeError if a pending writer tries to acquire a read lock.
Context manager that grants a write lock.
Will wait until no active readers. Blocks readers after acquiring.
Raises a RuntimeError if an active reader attempts to acquire a lock.
Bases: object
A garbage collected container of semaphores.
This collection internally uses a weak value dictionary so that when a semaphore is no longer in use (by any threads) it will automatically be removed from this container by the garbage collector.
New in version 0.3.
Gets (or creates) a semaphore with a given name.
Parameters: | name – The semaphore name to get/create (used to associate previously created names with the same semaphore). |
---|
Returns an newly constructed semaphore (or an existing one if it was already created for the given name).
Return the path used for external file-based locks.
Parameters: | conf (oslo_config.cfg.ConfigOpts) – Configuration object |
---|
New in version 1.8.
Context based lock
This function yields a threading.Semaphore instance (if we don’t use eventlet.monkey_patch(), else semaphore.Semaphore) unless external is True, in which case, it’ll yield an InterProcessLock instance.
Parameters: |
|
---|
Changed in version 0.2: Added do_log optional parameter.
Changed in version 0.3: Added delay and semaphores optional parameters.
Remove an external lock file when it’s not used anymore This will be helpful when we have a lot of lock files
Partial object generator for the remove lock file function.
Redefine remove_external_lock_file_with_prefix in each project like so:
(in nova/utils.py)
from oslo_concurrency import lockutils
synchronized = lockutils.synchronized_with_prefix('nova-')
synchronized_remove = lockutils.remove_external_lock_file_with_prefix(
'nova-')
(in nova/foo.py)
from nova import utils
@utils.synchronized('mylock')
def bar(self, *args):
...
<eventually call synchronized_remove('mylock') to cleanup>
The lock_file_prefix argument is used to provide lock files on disk with a meaningful prefix.
Set value for lock_path.
This can be used by tests to set lock_path to a temporary directory.
Synchronization decorator.
Decorating a method like so:
@synchronized('mylock')
def foo(self, *args):
...
ensures that only one thread will execute the foo method at a time.
Different methods can share the same lock:
@synchronized('mylock')
def foo(self, *args):
...
@synchronized('mylock')
def bar(self, *args):
...
This way only one of either foo or bar can be executing at a time.
Changed in version 0.3: Added delay and semaphores optional parameter.
Partial object generator for the synchronization decorator.
Redefine @synchronized in each project like so:
(in nova/utils.py)
from oslo_concurrency import lockutils
synchronized = lockutils.synchronized_with_prefix('nova-')
(in nova/foo.py)
from nova import utils
@utils.synchronized('mylock')
def bar(self, *args):
...
The lock_file_prefix argument is used to provide lock files on disk with a meaningful prefix.