Sushkov: multiprocessing - к потокам не относится. Как следует из названия, это "многопроцессность". Библиотека запускает для каждой задачи отдельный процесс интерпретатора.
StasShk: параметр related_name='images' поля ForeignKey задаёт обратную связь. Фреймворк создаст в экземпляре класса Product атрибут images, содержащий менеджер модели ProductImage.
Сергей Горностаев
@sergey-gornostaev Автор вопроса, куратор тега Django
Roman Kitaev: спасибо за то, что натолкнул меня на мысль. Я её развил. Разбиваю данные на куски и скармливаю потокам gevent, которые заливают их в базу в контексте транзакции.
Сергей Горностаев
@sergey-gornostaev Автор вопроса, куратор тега Django
Roman Kitaev: bulk create, как я уже сказал, мне не подходит из-за разветвлённости данных. А применение транзакций для ускорения - это старинный рецепт, который есть в каждой статье на тему orm performance.
Сергей Горностаев
@sergey-gornostaev Автор вопроса, куратор тега Django
В каждой записи не просто строка или цифра. Там словарь, по которому создаются объекты, который в последствии записываются в базу. Сколько конкретно объектов в одной записи неизвестно. Взаимосвязи между ними тоже неизвестны.
Сергей Горностаев
@sergey-gornostaev Автор вопроса, куратор тега Django
Roman Kitaev: для того, чтобы ускорить загрузку данных.
def auto_transaction(): #37 секунд
for i in range(10000):
name="String number %s" % i
Record.objects.create(name=name)
@transaction.commit_manually
def manual_transaction(): #2.65 секунды
for i in range(10000):
name="String number %s" % i
Record.objects.create(name=name)
transaction.commit()
Сергей Горностаев
@sergey-gornostaev Автор вопроса, куратор тега Django
Roman Kitaev: внутри блока with atomic() цикл по всему объёму данных? Так там 200 000 элементов, то есть 200 000 итераций. И коммит будет только после завершения всех 200 000. А мне надо коммитить каждую 1000 отдельно.
Сергей Горностаев
@sergey-gornostaev Автор вопроса, куратор тега Django
Roman Kitaev: как? Обернуть им тело цикла? Тогда разом будут коммититься 200 000 записей. Обернуть кусок кода в теле цикла? Тогда будет коммититься каждая запись. А мне надо чтобы 1000 записей разом, потом ещё 1000, потом ещё и так 200 раз.