У меня есть приложение Django, которое использует MySQL и механизм InnoDB для устройства хранения данных. По некоторым причинам Django иногда уезжает, закрепляет, даже после того, как запрос завершился. (Я вижу их с Innotop).
Единственный обрабатывающий транзакцию материал, который я делаю в своем коде, - то, что у меня есть django.db.transaction.commit_on_success, указанный для части моего сохранения () методы, где я работаю с наследованием мультитаблицы.
Если я перезапускаю сервер Apache, блокировки уходят.
Кто-либо видел что-то вроде этого? Я, возможно, записал в некотором антишаблоне, который вызвал бы это?
Единственный раз, когда мне удалось это сделать, - это настройка «запланированных» задач в Django, которые не были связаны с запросами / представлениями. Система обработки транзакций с автоматической фиксацией по умолчанию фиксирует транзакции только тогда, когда пара запрос / ответ завершена и отправлена обратно конечному пользователю, поэтому создание заданий в стиле кроны, которые выполняются без отправки запроса, обходит этот механизм.
В противном случае, как правило, довольно сложно заставить его не снять блокировку. Вы уверены, что не существует очень долго выполняющихся блоков кода (возможно, полагающихся на внешнюю службу, у которой истекает время ожидания или что-то в этом роде), связывающих вещи?