Thread-safe dictionary
Diez B. Roggisch
deets at nospam.web.de
Thu May 10 08:55:42 EDT 2007
Jean-Paul Calderone schrieb:
> 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.
Technically - yes. But you should mention that the reason for that is
the GIL, which essentially ensures that python as whole is threadsafe on
the level of assignments, collection manipulation and so forth. At the
cost of not being able to have real concurrent threads except for C-code
that explicitly releases the GIL.
Diez
More information about the Python-list
mailing list