[Python-ideas] set.add could return True or False
Andrew Svetlov
andrew.svetlov at gmail.com
Wed Mar 14 18:46:48 CET 2012
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
More information about the Python-ideas
mailing list