[Python-ideas] set.add could return True or False
Matt Joiner
anacrolix at gmail.com
Wed Mar 14 19:26:21 CET 2012
This is an example only.
On Mar 15, 2012 1:46 AM, "Andrew Svetlov" <andrew.svetlov at gmail.com> wrote:
> You still can get race condition:
>
> if b.add(a):
> # some thread removes a from b before do_c call...
> do_c()
>
> Explicit lock is still required for your case.
>
> On Wed, Mar 14, 2012 at 10:36 AM, Matt Joiner <anacrolix at gmail.com> wrote:
> > set.add(x) could return True if x was added to the set, and False if x
> > was already in the set.
> >
> > Adding an element that is already present often constitutes an error in
> my code.
> >
> > As I understand, set.add is an atomic operation. Having set.add return
> > a boolean will also allow EAFP-style code with regard to handling
> > duplicates, the long winded form of which is currently:
> >
> > if a not in b:
> > b.add(a) <-- race condition
> > do_c()
> >
> > Which can be improved to:
> >
> > if b.add(a):
> > do_c()
> >
> > Advantages:
> > * Very common code pattern.
> > * More concise.
> > * Allows interpreter atomicity to be exploited, often removing the
> > need for additional locking.
> > * Faster because it avoids double contain check, and can avoid locking.
> > _______________________________________________
> > Python-ideas mailing list
> > Python-ideas at python.org
> > http://mail.python.org/mailman/listinfo/python-ideas
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20120315/6014cbbd/attachment.html>
More information about the Python-ideas
mailing list