В транзакции django с функцией select_for_update обнаружена мертвая блокировка

У меня есть две функции: одна для обновления данных, другая для чтения данных. При их одновременном выполнении в двух потоках возникает тупик. Кто-нибудь знает, почему? Уровень изоляции базы данных установлен на REPEATABLE-READ. Функция sleep используется для увеличения вероятности возникновения тупика.

@transaction.atomic()
def func_change_data():
    print("start")
    time.sleep(10)
    boos = Boo.objects.select_for_update(skip_locked=True).filter(pk=xxx)
    if not changes.exists():
        return

    print("sleep")
    time.sleep(10)
    boo = boos.first()
    boo.stage = 'stage_2'
    boo.save()
    print("end")
@transaction.atomic()
def func__read():
    boo = Boo.objects.select_for_update().get(
        pk=xxx,
        target_branch='master',
        stage='stage_1'
    )
    time.sleep(10)
    print("end sleep")
Вернуться на верх