Roman Prokofyev

Chief Scientist at FAIRTIQ. I work on making public transport accessible for everyone.

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

15 Nov 2011 » sciencewise, django, concurrency

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

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

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