Почему мои вызовы подпроцесса требуют перезагрузки страницы для выполнения? - PullRequest
3 голосов
/ 03 сентября 2011

У меня есть два отдельных subprocess вызова в приложении django, каждый в отдельном представлении. Первый вызывает инструмент преобразования изображений dcraw, чтобы взять загруженное необработанное изображение и преобразовать его в формат tiff. (Выходной файл .tiff обычно в девять раз больше, чем входной сигнал, например, 8-мегабайтное изображение дает 72-мегабитный звук.)

pdcraw = subprocess.Popen(dcraw_args, stdout=None, stderr=None)
pdcraw.communicate()

Мой второй подпроцесс вызывает скрипт Matlab, который обрабатывает TIFF и выводит соответствующие файлы данных и изображения. Этот вызов обычно занимает хорошие 15-20 секунд, когда я сам запускаю скрипт.

result = subprocess.Popen(matlab_args, stdout=None, stderr=None)
result.communicate()

Моя проблема: с обоими этими вызовами подпроцесса я должен перезагрузить представление вручную, чтобы они действительно запустились. Остальная часть кода вокруг них работает нормально. Любые мысли о том, как я могу избежать этого? Мне интересно, если это какая-то проблема с кэшем, так как я смог запустить первый подпроцесс пару раз, прежде чем он начнет требовать перезагрузки. Ваше понимание очень ценится! Заранее спасибо.

Вещи, которые я пробовал:

  • Вставка time.sleep вокруг подпроцессов, думая, что, возможно, он оборван. Не работает
  • Использование труб вместо None для stdout. Я полагаю, что должен использовать None, поскольку мне не нужно читать результаты команды (они просто выводят изображения в каталог, указанный в аргументах).
  • Проклятие на это. Все еще продолжается.

1 Ответ

0 голосов
/ 03 сентября 2011

, поскольку вся идея подпроцесса является асинхронной, она не будет готова, когда ваше представление будет проанализировано в браузере.

Возможно, вы делаете Ajax-запрос для проверки состояния процесса, и как только файлы становятся доступны, они могут быть отправлены сервером.

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

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