[Python-Dev] Issue 14417: consequences of new dict runtime error
Etienne Robillard
animelovin at gmail.com
Fri Mar 30 17:45:05 CEST 2012
"Multiple threads can agree by convention not to mutate a shared dict,
there's no great need for enforcement. Multiple processes can't share
dicts."
its not sure I get completely the meaning of "mutate"... And if
possible, I would like also the rational for the 2nd phrase while we're
at it as it seem a little unclear too. Sorry also
if this is OT... :)
Regards,
Etienne
http://www.python.org/dev/peps/pep-0416/
On 03/30/2012 10:47 AM, Guido van Rossum wrote:
> Etienne, I have not understood either of your messages in this thread.
> They just did not make sense to me. Do you actually understand the issue
> at hand?
>
> --Guido
>
> On Friday, March 30, 2012, Etienne Robillard wrote:
>
> On 03/29/2012 06:07 PM, R. David Murray wrote:
>
> On Thu, 29 Mar 2012 23:00:20 +0200, Stefan
> Behnel<stefan_ml at behnel.de> wrote:
>
> R. David Murray, 29.03.2012 22:31:
>
> On Thu, 29 Mar 2012 13:09:17 -0700, Guido van Rossum wrote:
>
> On Thu, Mar 29, 2012 at 12:58 PM, R. David Murray wrote:
>
> Some of us have expressed uneasiness about the
> consequences of dict
> raising an error on lookup if the dict has been
> modified, the fix Victor
> made to solve one of the crashers.
>
> I don't know if I speak for the others, but
> (assuming that I understand
> the change correctly) my concern is that there
> is probably a significant
> amount of threading code out there that assumes
> that dict *lookup* is
> a thread-safe operation. Much of that code
> will, if moved to Python
> 3.3, now be subject to random runtime errors for
> which it will not
> be prepared. Further, code which appears safe
> can suddenly become
> unsafe if a refactoring of the code causes an
> object to be stored in
> the dictionary that has a Python equality method.
>
>
> My original assessment was that this only affects
> dicts whose keys
> have a user-implemented __hash__ or __eq__
> implementation, and that
> the number of apps that use this *and* assume the
> threadsafe property
> would be pretty small. This is just intuition, I
> don't have hard
> facts. But I do want to stress that not all dict
> lookups automatically
> become thread-unsafe, only those that need to run
> user code as part of
> the key lookup.
>
>
> You are probably correct, but the thing is that one
> still has to do the
> code audit to be sure...and then make sure that no one
> later introduces
> such an object type as a dict key.
>
>
> The thing is: the assumption that arbitrary dict lookups are
> GIL-atomic has
> *always* been false. Only those that do not involve Python
> code execution
> for the hash key calculation or the object comparison are.
> That includes
> the built-in strings and numbers (and tuples of them), which
> are by far the
> most common dict keys. Looking up arbitrary user provided
> objects is
> definitely not guaranteed to be atomic.
>
>
> Well, I'm afraid I was using the term 'thread safety' rather too
> loosely
> there. What I mean is that if you do a dict lookup, the lookup
> either
> returns a value or a KeyError, and that if you get back an
> object that
> object has internally consistent state. The problem this fix
> introduces
> is that the lookup may fail with a RuntimeError rather than a
> KeyError,
> which it has never done before.
>
> I think that is what Guido means by code that uses objects with
> python
> eq/hash *and* assumes threadsafe lookup. If mutation of the objects
> or dict during the lookup is a concern, then the code would use
> locks
> and wouldn't have the problem. But there are certainly situations
> where it doesn't matter if the dictionary mutates during the lookup,
> as long as you get either an object or a KeyError, and thus no
> locks are
> (currently) needed.
>
> Maybe I'm being paranoid about breakage here, but as with most
> backward
> compatibility concerns, there are probably more bits of code
> that will
> be affected than our intuition indicates.
>
> --David
> ______________________________ _________________
>
>
> what this suppose to mean exactly? To "mutate" is a bit odd concept
> for a programming language I suppose. Also I suppose I must be
> missing something which makes you feel like this is an OT post when
> the problem seem most likely to be exclusively in python 3.3,
> another reason I guess to not upgrade yet all that massively using
> 2to3. :-)
>
> cheers,
> Etienne
> ______________________________ _________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/ mailman/listinfo/python-dev
> <http://mail.python.org/mailman/listinfo/python-dev>
> Unsubscribe: http://mail.python.org/ mailman/options/python-dev/
> guido%40python.org
> <http://mail.python.org/mailman/options/python-dev/guido%40python.org>
>
>
>
> --
> --Guido van Rossum (python.org/~guido <http://python.org/~guido>)
More information about the Python-Dev
mailing list