Estoy tratando de incrementar atómicamente un contador simple en Django. Mi código es el siguiente:Incremento atómico de un contador en django
from models import Counter
from django.db import transaction
@transaction.commit_on_success
def increment_counter(name):
counter = Counter.objects.get_or_create(name = name)[0]
counter.count += 1
counter.save()
Si entiendo Django correctamente, esto debe envolver la función en una transacción y que el incremento atómica. Pero no funciona y hay una condición de carrera en la actualización del contador. ¿Cómo se puede hacer que este código sea seguro para subprocesos?
¿Qué base de datos está utilizando? –
Para mí, parece un desperdicio no usar '+ =' para evitar las condiciones de carrera. Los usuarios de Python ya deberían saber que existe una diferencia entre 'a + = b' y' a = a + b', entonces ¿por qué no usar eso? Tal vez va a entrar en conflicto con algunos datos de caché? No es seguro. – aliqandil