У меня есть приложение 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')