Python, incremento atómico contrario.

¿Cómo puedo traducir el siguiente código de Java a Python?

AtomicInteger cont = new AtomicInteger(0); int value = cont.getAndIncrement(); 

Lo más probable es que con un threading.Lock alrededor de cualquier uso de ese valor. No hay modificación atómica en Python a menos que uses pypy (si lo haces, echa un vistazo a __pypy__.thread.atomic en la versión __pypy__.thread.atomic ).

itertools.count devuelve un iterador que realizará el equivalente a getAndIncrement() en cada iteración.

Ejemplo:

 import itertools cont = itertools.count() value = cont.next() 

Esto realizará la misma función, aunque no está bloqueado y el nombre ‘AtomicInteger’ implicaría.

Tenga en cuenta que otros métodos tampoco están estrictamente bloqueados: dependen de la GIL y no son portátiles entre los intérpretes de Python.

 class AtomicInteger(): def __init__(self, value=0): self._value = value self._lock = threading.Lock() def inc(self): with self._lock: self._value += 1 return self._value def dec(self): with self._lock: self._value -= 1 return self._value @property def value(self): with self._lock: return self._value @value.setter def value(self, v): with self._lock: self._value = v return self._value