Как перенаправить стандартный вывод в контейнере докеров FastAPI? ⇐ Python
-
Anonymous
Как перенаправить стандартный вывод в контейнере докеров FastAPI?
У меня есть API для модели Whisper AI. Этот API запускает транскрипцию аудиофайла. Когда начнется транскрипция, я хотел, чтобы на интерфейсе появился индикатор выполнения. Я получил это, используя следующий код.
@app.websocket("/ws/transcribe") асинхронная защита transcribe_websocker(websocket: WebSocket): ожидайте websocket.accept() процесс = subprocess.Popen(['python', 'ai.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, Universal_newlines=True, Shell=False) пока правда: линия = процесс.stdout.readline() если не строка: перерыв # Закодируйте и отправьте строку клиенту WebSocket encoded_line = line.encode('utf-8') печать (кодированная_строка) ожидайте websocket.send_text(encoded_line) # Закрываем процесс и соединение WebSocket процесс.stdout.close() процесс.ожидание() ожидайте websocket.close() Когда я запускаю этот код на своем компьютере с Windows, используя команду uvicorn main:app --reload для разработки, он работает. Он дает вывод индикатора выполнения программы с течением времени до завершения программы. Я могу показывать индикатор выполнения на веб-интерфейсе по мере его выполнения.
Но когда я создал контейнер Docker, ответ теперь отправляет все данные только в конце, когда программа завершает выполнение. Он не отправляет ответ между тем, когда прогресс продолжается. Используемый Dockerfile:
ИЗ Python:3.10-slim WORKDIR/python-docker ЗАПУСК apt-get update && apt-get install git -y ЗАПУСТИТЕ pip3, установите fastapi ЗАПУСТИТЕ pip3, установите «uvicorn [стандарт]» ЗАПУСК pip3 install -U git+https://github.com/jianfch/stable-ts.git ЗАПУСК apt-get install -y ffmpeg ЗАПУСТИТЕ pip3, установите Moviepy ЗАПУСТИТЬ pip3 установить Streaming_form_data RUN pip3 установить веб-сокеты КОПИРОВАТЬ. . #КОПИРОВАНИЕ МОДЕЛЕЙ КОПИРУЙТЕ base.pt /root/.cache/whisper/base.pt. ВЫСТАВКА 8000 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
У меня есть API для модели Whisper AI. Этот API запускает транскрипцию аудиофайла. Когда начнется транскрипция, я хотел, чтобы на интерфейсе появился индикатор выполнения. Я получил это, используя следующий код.
@app.websocket("/ws/transcribe") асинхронная защита transcribe_websocker(websocket: WebSocket): ожидайте websocket.accept() процесс = subprocess.Popen(['python', 'ai.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, Universal_newlines=True, Shell=False) пока правда: линия = процесс.stdout.readline() если не строка: перерыв # Закодируйте и отправьте строку клиенту WebSocket encoded_line = line.encode('utf-8') печать (кодированная_строка) ожидайте websocket.send_text(encoded_line) # Закрываем процесс и соединение WebSocket процесс.stdout.close() процесс.ожидание() ожидайте websocket.close() Когда я запускаю этот код на своем компьютере с Windows, используя команду uvicorn main:app --reload для разработки, он работает. Он дает вывод индикатора выполнения программы с течением времени до завершения программы. Я могу показывать индикатор выполнения на веб-интерфейсе по мере его выполнения.
Но когда я создал контейнер Docker, ответ теперь отправляет все данные только в конце, когда программа завершает выполнение. Он не отправляет ответ между тем, когда прогресс продолжается. Используемый Dockerfile:
ИЗ Python:3.10-slim WORKDIR/python-docker ЗАПУСК apt-get update && apt-get install git -y ЗАПУСТИТЕ pip3, установите fastapi ЗАПУСТИТЕ pip3, установите «uvicorn [стандарт]» ЗАПУСК pip3 install -U git+https://github.com/jianfch/stable-ts.git ЗАПУСК apt-get install -y ffmpeg ЗАПУСТИТЕ pip3, установите Moviepy ЗАПУСТИТЬ pip3 установить Streaming_form_data RUN pip3 установить веб-сокеты КОПИРОВАТЬ. . #КОПИРОВАНИЕ МОДЕЛЕЙ КОПИРУЙТЕ base.pt /root/.cache/whisper/base.pt. ВЫСТАВКА 8000 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]