Ajax и Python - как бороться с тайм-аутом запроса - PullRequest
0 голосов
/ 18 октября 2019

У меня есть небольшой проект django, который создает отчет XLSX, используя XlsxWriter, получая записи из базы данных, используя следующий «псевдо» код Python:

global myWorkbook
myWorkbook = Workbook("my_report.xlsx", {'constant_memory':true})
db_conn = databases.getDbConnection()
table1_thread = threading.Thread(target=generate_sheet, args=("table1", db_conn))
table1_thread.start()

table2_thread = threading.Thread(target=generate_sheet, args=("table2", db_conn))    
table2_thread.start()

table3_thread = threading.Thread(target=generate_sheet, args=("table3", db_conn))
table3_thread.start()

table4_thread = threading.Thread(target=generate_sheet, args=("table4", db_conn))
table4_thread.start()

#Threads joining here...

db_conn.close()
return myWorkbook

Эти таблицы, которые я делаю в SELECT, действительноОгромный (около 50 тысяч строк) и создание отчета занимает много времени (от 2 до 8 минут).

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

Но я столкнулся с проблемой тайм-аута после нажатия кнопки «Создать отчет». Я искал в интернете и обнаружил, что не могу изменить этот тайм-аут ajax.

Итак, я хотел бы сейчас: что я должен сделать для достижения этой цели? У меня нет возможности сохранять отчеты на сервере, потому что они тяжелые (около 40 ~ 60 МБ) и генерируются каждый день.

1 Ответ

1 голос
/ 18 октября 2019

Я не уверен на 100%, поможет ли это вам или нет, но я думал о следующем подходе:

В Django: Запустите задачу сельдерея https://docs.celeryproject.org/en/latest/index.html (документация) https://buildwithdjango.com/blog/post/celery-progress-bars/ (Базовый веб-поиск) https://blog.miguelgrinberg.com/post/using-celery-with-flask (Реализация Flask)

Во внешнем интерфейсе: вызов Ajax вызовет задачу Celery
Во время выполнения задачи «Идет загрузка или какой-нибудь удобный текст» послеполучение задания завершить ответ "Загрузка завершена"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...