у строки по умолчанию false.
Есть метод, который читает эту строку и меняет значение флага.
Флаг меняется через декораторы.
При приблизительно одновременном вызове метода( через декораторы) из орм в оба экземлпляра метода приходят одинаковые значения строки и флага. Естественно оба экземпляра выполняются успешно, чего не должно быть. Есть ли какие-либо готовые решения для устранения этой проблемы?
Можно заблокировать строку в бд, но это плохое решение
Готовое решение SELECT FOR UPDATE, в QuerySet.select_for_update, лок ROW SHARE на строку, селекты не блокируются, селект с FOR UPDATE ожидает окончания первого запроса и возвращает новую строку. Как альтернативный вариант advisory lock. Вообще неплохо было бы описать зачем это, возможно стоит решать вообще по другому задачу.
Обсуждают сегодня