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)