Обновление модели Django с защитой от гоночных условий
Допустим, у нас есть таблица базы данных workers со следующими полями:
id [int]
active [bool]
Предположим, что у нас есть N > 1 записей в базе данных. Эти записи представляют фоновые процессы. Требуется разрешить работу ровно одного процесса.
Мой вопрос: как избежать условий гонки, когда все фоновые процессы пытаются стать активным процессом.
На обычном SQL я бы попробовал сделать примерно следующее:
UPDATE workers SET active = (SELECT MAX(*) FROM workers) XOR 1 WHERE id=...;
Похоже, что только одному работнику может посчастливиться выжить XOR.
Мой главный вопрос заключается в следующем: как достичь того же эффекта, используя модели Django.
Я смотрю вокруг F expressions, но пока не нашел вдохновения.