Форум сайта python.su
У меня есть форма через которую пользователь загружает на сервер файл и содержимое этого файла нужно обработать.
Сейчас у меня из функции представления, в которой осуществляется прием файла идёт вызов функции, которая занимается обработкой полученного файла. Кривость такого метода, что пока обработка файла не закончится, пользователь не получит страницу, на которой будет отображено, что файл принят успешно. Вопрос в том, куда сохранить файл и откуда запускать обработку файла (откуда и как её запускать).
Отредактировано ivan985 (Апрель 10, 2014 12:28:59)
Офлайн
celery?
Офлайн
+1 celery
Офлайн
PanovSergey
Вроде бы то, что нужно, но хотелось бы узнать, есть ещё варианты?
Офлайн
ivan985если нет необходимости в обработке файле сразу после отправки. можно сделать таблицу с задачками, куда добавлять инфу по файлу и написать манадж команду. и раз в сутки обработать все файлы пользователя разом.
есть ещё варианты?
Офлайн
ilnur
Нет файл, нужно начинать обрабатывать после загрузки.
Я тоже думал задействовать планировщик cron, просто думаю есть более кашерный способ.
Офлайн
Два способа:
http://habrahabr.ru/post/158961/
Способ с кроном или асинхронной обработкой файла, запускаемой сразу после загрузки файла чреват уязвимостью. Все равно нужно заботиться о длине очереди и количестве запускаемых процессов.
Смысл придумывать велосипед не вижу.
Пользователю, конечно, нужно сразу отдавать страницу после загрузки файла, если изначально не используется асинхронный аплоад.
Загрузился файл - сразу сообщить пользователю.
И потом показывать прогресс обработки файла.
Офлайн
Lexander
Если я выполню return render_to_response, то у меня функция завершится. Откуда мне начинать запуск обработки файла?
Офлайн
Как раз этот способ я указал как не рекомендуемый!
А вообще перед return render_to_response можно вызывать запуск другого скрипта асинхронно.
Офлайн
Lexander
Подскажите пожалуйста, как можно запустить другой модуль асинхронно.
P.S Пытался найти сам, ничего не получилось, вся надежда на вас.
Отредактировано ivan985 (Апрель 10, 2014 23:13:06)
Офлайн