Развертывание приложения Flask в uwsgi с фоновым процессом с многопроцессорностью Python

1
8

У меня есть приложение Flask, которое транслирует кадры с камеры с низкой частотой кадров (с помощью pypylon). Чтобы ускорить отснятый материал, я создал процесс, который непрерывно извлекает кадр с камеры, потому что каждый захват занимает некоторое время. Он отлично работает с сервером Python, но не работает в uwsgi

Camera.py

main.py

Выше приведен некоторый code, который был написан (не весь). Если я запускаю python main.py, то он работает отлично. Но по некоторым причинам запуск uwsgi --http :8000 -w main:app полностью заблокирует непрерывную работу процесса камеры. Я не уверен, хочу ли я использовать Celery, потому что не знаю, как сохранить его производительность, поскольку он использует очередь сообщений. Если есть способ использовать Celery и сохранить частоту кадров, это было бы потрясающе, но если есть способ запустить приложение на uwsgi как есть, это было бы потрясающе

class Camera:
    ...
    current_frame=None

def capture():
    while Camera.on:
      current_frame = capture_frame_from_camera()

def get_processed_frame():
    return Camera.current_frame

from multiprocess import Process
from Camera import get_processed_frame, capture
def generate_frames():
    while True:
        frame = get_processed_frame()
        if frame is not None:
            _, buffer = cv2.imencode('.jpg', frame)
            frame = buffer.tobytes()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') 

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/video_feed')
def video_feed():
    return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

camera_process = Process(target=capture)
camera_process.start()

if __name__ == "__main__":

    app.run(host='0.0.0.0')

Федот
Вопрос задан28 июля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.