Я пытаюсь атомарно увеличить простой счетчик в 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()
Если я правильно понимаю Django, это должно заключить функцию в транзакцию и сделать приращение атомарным. Но это не работает, и в обновлении счетчика есть состояние гонки. Как сделать этот код поточно-ориентированным?
+=во избежание состояния гонки - такая трата времени. Пользователи Python уже должны знать, что междуa += bиa = a + bесть разница, так почему бы не использовать это? Может это будет противоречить каким-то данным кеша? Точно сказать не могу. - person aliqandil   schedule 19.04.2017