Обновление модели 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, но пока не нашел вдохновения.

Вернуться на верх