Исправление долго выполняющейся задачи фильтрации в представлениях django

    input_df = pd.read_excel(uploadedfile)
    variable_column = code
    search_type = 'icontains'
    filter = variable_column + '__' + search_type
    
    li = []
    for i in input_df["KT_DB"]:
        qset=KT_DB.objects.filter(**{ filter: i})
        df = pd.DataFrame.from_records(qset.values())
        li.append(df)
    frame = pd.concat(li, axis=0, ignore_index=True)
    with BytesIO() as b:
        # Use the StringIO object as the filehandle.
        writer = pd.ExcelWriter(b, engine='xlsxwriter')
        frame.to_excel(writer, sheet_name = 'Sheet1', index = False)
        writer.save()
        filename = 'KW'
        content_type = 'application/vnd.ms-excel'
        response = HttpResponse(b.getvalue(), content_type=content_type)
        response['Content-Disposition'] = 'attachment; filename="' + filename + '.xlsx"'
        return response

здесь, фильтруя несколько ключевых слов из таблицы базы данных, требуется больше времени для выполнения. получение тайм-аута запроса перед выполнением функции.

Вы должны сделать это в другой теме, это, вероятно, лучше.

Celery With Django for Background Task, что означает обработку файла excel с помощью задачи celery: https://docs.celeryq.dev/en/stable/getting-started/introduction.html. Вы можете показать другое решение в этой теме: Django Background Task

ИЛИ

В качестве быстрого хака, вы можете использовать async задачу с django. Вывести пользователю сообщение "обработка", ожидая, что файл доступен...

Никогда не тестировал, но эта библиотека тоже существует: https://django-q.readthedocs.io/en/latest/configure.html

Вернуться на верх