У меня есть проект django с веб-интерфейсом, в котором вы можете загружать файлы, и после успешной загрузки он вызывает cli-версию программного обеспечения для обработки и возвращает результат после успешного выполнения
Здесь,это небольшой фрагмент кода, который я использую в своем views.py
from cliproject.main import clirunner
# Some code for file upload and saving
clirunner()
. Он запустит скрипт Python командной строки main.py
, который присутствует в каталоге cliproject/
, и он сделает некоторые вещи и сохранит вывод.
Проблема в том, что весь этот процесс является синхронным в данный момент.Следовательно, страница пользователя загружается после загрузки файла из пользовательского интерфейса и до тех пор, пока он не будет обработан скриптом Python CLI за кулисами.Процесс выглядит так:
Django UI
| (User upload files)
views.py gets request and saves it somewhere
| (views run clirunner() to give python cli program control)
cliproject runs
| (After doing the stuff which is intended, it saves the output file)
views.py resumes
| (Reads the output file)
Django UI displays the output file
Итак, мы видим проблему здесь в том, что я вызываю другую программу CLI из views.py, чтобы выполнить то, что мне нужно.Но это происходит синхронно.
Мне нужно сделать процесс асинхронным, и я хочу показать что-то в виде полосы загрузки, чтобы уведомить их о том, что программа cli выполняется на задней стороне и имеет статус.После выполнения программы CLI полоса загрузки достигнет 100%, и асинхронный интерфейс django отобразит вывод
Я пробовал Celery.Но я не мог понять, как заставить эту панель загрузки работать на основе сценария python cli.Есть идеи?