Roman Prokofyev

New-Based Trading at LGT Capital Partners. Tech Advisor at FAIRTIQ.

Совместный доступ к ресурсам в Django

15 Nov 2011 » sciencewise, django, concurrency

Ну вот наконец-то наш проект и дорос до состояния, когда стали возникать ошибки совместного доступа к ресурсам.

Первой ласточкой стала **IOError **(CRC check failed), которая возникла когда один процесс начал закачивать архив статьи, а другой, подумав что архив уже скачан, принялся его старательно распаковывать.

Как раз для таких случаев в Django есть специальный декоратор: @transaction.commit_on_success (в Django 1.3 его также можно использовать как context manager). Просто добавляем его к функции, и при любом возникшем внутри функции исключении (например IOError), функция будет завершаться, не сохраняя никаких измнений в базу.