Рабочий процесс обработки аудио с Python - PullRequest
0 голосов
/ 08 ноября 2019

Обычно я нахожусь на внешней стороне стека, но мне нужно выполнить некоторую обработку звука на сервере и загрузить результаты.

Я хочу, чтобы пользователь мог загружать файл MP3на сервер и пусть он обрабатывает файл с использованием скрипта Python и позволяет пользователю загрузить результат. Процесс может занять от 10 до 20 минут, поэтому мне нужно будет уведомить пользователя, как только процесс завершится.

Я достаточно знаю о том, как загрузить файл MP3 на сервер, но потом яна моем конце. Я не уверен, как запустить скрипт Python, сохранить результат на веб-сервере, а затем предложить его временную загрузку.

Может ли кто-нибудь объяснить мне, как я могу поступить? это? Я не ожидаю, что кто-нибудь сделает за меня эту работу, но я ищу совет, с которого я мог бы начать читать о том, как сделать что-то из этого.

Может ли это работать для функций без сервера?

Спасибо!

1 Ответ

1 голос
/ 08 ноября 2019

Это классический пример «фоновой» или асинхронной задачи. Как с точки зрения пользователя (человек на самом деле не хочет сидеть сложа руки в ожидании 20 минут), так и веб-сервер (который не должен висеть на этом запросе).

Рекомендуемый способ решения этой проблемы:какая-то система задач / заданий.

Когда файл загружен, веб-сервер создает и отправляет задачу в очередь. Затем он возвращает «задание принято» и завершает запрос. Эта задача затем обрабатывается асинхронно, предпочтительно, рабочим процессом бэкэнда. По завершении работы результаты работы сохраняются в базе данных. Работник также может создать URL-адрес, который можно использовать для просмотра этого результата. Затем этот URL-адрес может быть отправлен пользователю (скажем, по электронной почте), чтобы получить доступ к результату. Веб-интерфейс должен с этого URL отображать страницу на основе результатов, хранящихся в базе данных.

Хороший стек очереди задач с открытым исходным кодом и независимым от поставщика для Python - Celery . Для небольшого приложения вы можете использовать Redis как брокер сообщений и сервер результатов. Для больших приложений я рекомендую использовать RabbitMQ в качестве серверной части сообщения и Postgres / MySQL для результатов.

Эта серия блогов, состоящая из двух частей 1012 *, является хорошим введением в тему.

...