Создание экземпляров модели django из фрейма данных без таймаута сервера

Я загружаю застегнутый файл, который содержит один файл CSV. Затем я распаковываю его на сервере и загружаю в датафрейм. Затем я создаю из него объекты django.

Это работает нормально, пока мой массив данных не становится слишком большим. Когда набор данных становится слишком большим, сервер django выключается. Я предполагаю, что это происходит потому, что каждая итерация в моем цикле увеличивает память, и когда места в памяти не остается, он отключается. Я работаю с большими наборами данных и хочу, чтобы мой код работал независимо от размера датафрейма.

Представьте, что у меня есть такой df:

                       cola   fanta   sprite   libella
2018-01-01 00:00:00    0        12      12       34
2018-01-01 01:00:00    1        34      23       23 
2018-01-01 02:00:00    2         4       2        4 
2018-01-01 03:00:00    3        24       2        4 
2018-01-01 04:00:00    4         2       2        5 

Представьте, что столбцов может быть до 1000 марок, а строк может быть более полумиллиона. Далее представьте, что у меня есть модель, которая сохраняет эти данные в поле JSONB. Таким образом, каждый столбец - это объект django, имя столбца - это название. Временная метка в сочетании с данными в столбце является полем JSONB.

например: name=fanta, json_data={ "2018-01-01 00:00:00": 12, "2018-01-01 01:00:0": 34 }

Мой код для распаковки, загрузки в df и последующего создания экземпляра django выглядит так:

        df = pd.read_csv(
            file_decompressed.open(name_file),
            index_col=0,
        )
        for column_name in df:
            Drink.objects.create(
                name=column_name,
                json_data=df[column_name].to_dict(),
            )

Как я уже сказал, это работает, но мой цикл обрывается после создания примерно 15 элементов. Поискав в интернете, я обнаружил, что bulk_create может сделать это более эффективным. Но у меня реализованы пользовательские сигналы, так что это не совсем решение. Я также думал об использовании to_sql, но поскольку мне нужно реструктурировать данные датафрейма, я не думаю, что это сработает. Может быть, вообще не использовать pandas? Может быть, как-то разбить DF на части?

Я ищу решение, которое работает независимо от количества столбцов. Количество строк - максимум полмиллиона строк. Я также пробовал цикл while, но возникает та же проблема.

Есть идеи, как я могу заставить это работать? За помощь буду очень признателен.

Моя фиктивная модель может быть такой простой, как:

class Juice(models.Model):
   name = CharField(...)
   json_data = JSONField(...)
Вернуться на верх