Как запустить python-скрипт через web-интерфейс и вернуть ответ о выполнении?

Всем добрый день.

Подскажите, как можно реализовать следующую задачу:
Есть скрипт на python, который решает математическую задачу.
Исходные данные для задачи хранятся в БД, из которой планируется тянуть данные.
Также будет веб-интерфейс на Django, через которые эти исходные данные можно править.
Сейчас я запускаю скрипт из терминала и даю ему тестовые данные из csv-файликов.

Исходя из вышесказанного несколько вопросов:
1) Как запустить скрипт с расчетами на сервере через веб-сайт?
2) Как реализовать ответ скрипта со статусом выполнения, чтобы было возможно просигнализировать пользователю о выполнении?

UPD: Решается задача линейного программирования большой размерности, из-за чего время решения может быть большим; либо я могу задать время исполнения сам.
  • Вопрос задан
  • 12542 просмотра
Решения вопроса 3
@kfuntov
1) Есть много способов запустить серверный консольный скрипт из веб-морды, надо смотреть на конкретные обстоятельства, навскидку пара:
* Celery (www.celeryproject.org/) - достаточно большая инфраструктура для исполнения задач
* os.subprocess.call (https://docs.python.org/2/library/subprocess.html) - запуск команд из python-скрипта
Чтобы выбрать из этих двух, надо ответить примерно на такие вопросы:
* Запускаемая хрень - python-скрипт, который я могу модифицировать? (Если нет, то celery не очень удобно прикручивать, но есть и другие адекватные решения)
* Будет ли плохо, если кто-то (или несколько человек) быстро запросят исполнение запускаемой хрени много раз одновременно? (Если да, то subprocess вряд ли подойдёт, так скорее всего нужен какой-либо менеджер очередей)

2) Сигнализация о завершении чего либо может быть разнообразной (скорее всего всё это вы видели в разных системах):
* Отображать статус на специальной странице (или всех страницах) - пользователю надо обновлять страницу, чтобы увидеть смену статуса.
* AJAX запросы к серверу, которые обновляют статус, отображаемый на странице автоматически
* e-mail или sms
* push-уведомление в мобильное приложение :)

Если вы определитесь, могу описать что-то подробнее (каждый вариант рассматривать подробно, к сожалению, крайне лень).
Ответ написан
SilentSokolov
@SilentSokolov
Обе задачи можно решить с помощью Сelery, но можно взять что-то полегче по типу python-rq, но там придется помучиться со статусом выполнения.
Ответ написан
Комментировать
rzhannoy
@rzhannoy
Интегрируйте в проект celery и выводите логику в соответствующий таск. Уведомление о выполнении можно слать на мыло или показывать прям на странице. Самый простой и гибкий вариант для вашего случая.

docs.celeryproject.org/en/latest/getting-started/i...
docs.celeryproject.org/en/latest/django/first-step...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
vvpoloskin
@vvpoloskin Куратор тега Компьютерные сети
Инженер связи
Так если скрипт на python-е, а в качестве веб-интерфейса - django, почему бы не взять код в скрипте в отдельную функцию, а в обработке django просто сделать импорт и вызвать эту функцию? Зачем мудрить)
Ответ написан
@EvilX
Скрипт долго выполняется? Может, старого-доброго cgi хватит?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы