My django app сохраняет модели django в удаленной базе данных. Иногда сейвы взрывоопасны. Чтобы освободить основной поток (* thread_A *) приложения от времени, затрачиваемого на сохранение нескольких объектов в базе данных, я подумал о переносе объектов модели в отдельный поток (* thread_B *) с помощью collections.deque
и иметь * thread_B * сохраняйте их последовательно.Python GIL: блокировка django save()?
Однако я не уверен относительно этой схемы. save()
возвращает идентификатор новой записи базы данных, поэтому он «заканчивается» только после ответа базы данных, которая находится в конце транзакции.
ли django.db.models.Model.save()
действительно блокировать GIL -wise и освободить другой Пайтон резьбы во по сделке?
Планируете ли вы получить доступ к базе данных из любого другого потока во время 'save()'? –
@DonalFellows В моем конкретном случае - не локально. Возможно, какой-то удаленный наблюдатель может запросить базу данных, но это обычное использование транзакций базы данных. – Jonathan
[Представление Дэвида Бизли в 2011 году Pycon GIL] (http://www.dabeaz.com/talks/EmbraceGIL/EmbracingGIL.pdf) выглядит актуальным – Jonathan