[Python-Dev] Re: Thread safety of deques
Phillip J. Eby
pje at telecommunity.com
Tue Jul 20 00:53:16 CEST 2004
At 11:01 PM 7/19/04 +0100, Paul Moore wrote:
> >> To contrast, list.append() does not claim thread safety.
> > List operations like most C functions are also atomic.
>Thanks for that clarification. A note *somewhere* in the python-level
>documentation, stating that operations implemented in C are typically
>atomic, and so thread-safe, might be useful.
Perhaps it would be useful to point out that "safe" here means, "doesn't
corrupt the dictionary or crash Python". It doesn't mean "actually safe". :)
It would probably be "safest" not to describe anything as "thread safe",
but rather point out that in general, Python won't crash because a data
structure was accessed or altered by more than one thread, and that most
operations on most built-in types are atomic.
However, anything that calls back into Python code isn't necessarily
atomic, and in general, almost anything can call back into Python code.
For example, the seemingly harmless dictionary item assignment can call
back into Python for a custom type's __hash__ and __eq__ methods, so could
it be that a thread switch could actually occur during this statement:
foo[bar] = baz
if 'bar' has such custom methods? Maybe I'm wrong, and the GIL is still
held in such a case, but I'm not sure *how*.
More information about the Python-Dev