Django select for update поведение при тестировании

Пытаясь понять работу select_for_update в django, я создал тест, чтобы посмотреть. В моем понимании, если есть два процесса, один выбирает для обновления внутри транзакции, другой пытается записать в заблокированные строки до завершения транзакции в другом процессе, то запись будет неудачной. Однако следующий тест проходит нормально. Что может быть не так?

@pytest.mark.django_db(transaction=True)
def test_select_for_update():

    ExampleModel.objects.create(type="test1")
    ExampleModel.objects.create(type="test2")

    import os
    child_pid = os.fork()
    if child_pid == 0:
        sleep(5)
        qs = ExampleModel.objects.all()
        ExampleModel.objects.bulk_update(qs, ["type"])
    else:
        with transaction.atomic():
            qs = ExampleModel.objects.all().select_for_update()
            for obj in qs:
                obj.type = "test3"

            ExampleModel.objects.bulk_update(qs, ["type"])
            sleep(10)
Вернуться на верх