¿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