Thread-safe dictionary

Jean-Paul Calderone exarkun at divmod.com
Thu May 10 08:53:11 EDT 2007


On 10 May 2007 05:45:24 -0700, tuom.larsen at gmail.com wrote:
>Hi,
>
>please consider the following code:
>
>
>from __future__ import with_statement
>
>class safe_dict(dict):
>    def __init__(self, *args, **kw):
>        self.lock = threading.Lock()
>        dict.__init__(self, *args, **kw)
>    def __getitem__(self, key):
>        with self.lock:
>            return dict.__getitem__(self, key)
>    def __setitem__(self, key, value):
>        with self.lock:
>            dict.__setitem__(self, key, value)
>    def __delitem__(self, key):
>        with self.lock:
>            dict.__delitem__(self, key)
>
>
>- would I need to override another methods e.g. update() or items() in
>order to remain thread-safe or is this enough?
>- in __getitem__, does it release the lock after returning the item?
>- wouldn't it be better to use threading.RLock, mutex, ... instead?
>

The builtin dict type is already thread safe.

Jean-Paul



More information about the Python-list mailing list