Atomic get and increment in pythonFor generating continuous unique id's in python I needed a thread safe way to do this:
When disassembling this code we will get this:
x = counter counter += 1
2 0 LOAD_FAST 0 (counter) 3 STORE_FAST 1 (x) 3 6 LOAD_FAST 0 (counter) 9 LOAD_CONST 1 (1) 12 INPLACE_ADD 13 STORE_FAST 0 (counter)As you can see not even counter += 1 is atomic. Now the obvious solution would be to use a lock. The not so obvious solution is to use a itertools.count(). The counter is implemented in C and doesn't release the GIL so it is atomic. The code would the look like this:
which is more pretty anyway.
x = counter.next()