Как сделать мое приложение Django масштабируемым для загрузки CSV-файла?

Я хочу загрузить большой файл csv (40 МБ). Сейчас для 1 MB файла требуется почти 1.5 минуты, и я думаю, что это не достаточно хорошо для меня. Я хочу сделать это так быстро. Я использовал функцию bulk create вместо функции create, но я заметил, что и то, и другое занимает одинаковое время. Как я могу сделать это быстро? Какая процедура достаточно хороша для загрузки больших csv? Могу ли я предоставить django Celery для загрузки больших csv.

#это мой код

def upload_file_view(request):
    start_time = datetime.now()
    form = CsvModelForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        form.save()
        form = CsvModelForm
        obj = Csv.objects.get(activated=False)
        with open(obj.file_name.path, 'r') as f:
            reader = csv.reader(f)

            for i, row in enumerate(reader):
                if i == 0:
                    pass
                else:
                    print(row)  
                    date = row[0]
                    appl_open = row[1]
                    appl_high = row[2]
                    appl_low = row[3]
                    appl_close = row[4]
                    appl_volume = row[5]
                    appl_adjusted = row[6]
                    dn = row[7]
                    mavg = row[8]
                    up = row[9]
                    direction = row[10]

                    Data.objects.create(
                        date = date,
                        appl_open = appl_open,
                        appl_high = appl_high,
                        appl_low = appl_low,
                        appl_close = appl_close,
                        appl_volume = appl_volume,
                        appl_adjusted = appl_adjusted,
                        dn = dn,
                        mavg = mavg,
                        up = up,
                        direction = direction             
                    )
                   
            obj.activated = True
            obj.save()
            end_time = datetime.now()
            print('Duration: {}'.format(end_time - start_time))

    return render(request, 'core/task.html', {'form' : form})
Вернуться на верх