Я запускаю скрипт преобразования, который фиксирует большие объемы данных в БД, используя ORM Джанго. Я использую ручной коммит, чтобы ускорить процесс. У меня есть сотни файлов для фиксации, каждый файл создаст более миллиона объектов.
Я использую Windows 7 64bit. Я заметил, что процесс Python продолжает расти, пока он не потребляет больше 800 МБ, и это только для первого файла!
Скрипт перебирает записи в текстовом файле, повторно используя те же переменные и не накапливая списки или кортежи.
Я прочитал здесь , что это общая проблема для Python (и, возможно, для любой программы), но я надеялся, что, возможно, у Django или Python есть какой-то явный способ уменьшить размер процесса ...
Вот краткий обзор кода:
import sys,os
sys.path.append(r'D:\MyProject')
os.environ['DJANGO_SETTINGS_MODULE']='my_project.settings'
from django.core.management import setup_environ
from convert_to_db import settings
from convert_to_db.convert.models import Model1, Model2, Model3
setup_environ(settings)
from django.db import transaction
@transaction.commit_manually
def process_file(filename):
data_file = open(filename,'r')
model1, created = Model1.objects.get_or_create([some condition])
if created:
option.save()
while 1:
line = data_file.readline()
if line == '':
break
if not(input_row_i%5000):
transaction.commit()
line = line[:-1] # remove \n
elements = line.split(',')
d0 = elements[0]
d1 = elements[1]
d2 = elements[2]
model2, created = Model2.objects.get_or_create([some condition])
if created:
option.save()
model3 = Model3(d0=d0, d1=d1, d2=d2)
model3 .save()
data_file.close()
transaction.commit()
# Some code that calls process_file() per file