# Streaming de video con Gunicorn/Django

**URL:** <https://pyar.discourse.group/t/streaming-de-video-con-gunicorn-django/461>\
**Category:** Sin categoría\
**Created:** [5 Octubre, 2020 17:54 UTC](https://pyar.discourse.group/t/streaming-de-video-con-gunicorn-django/461 "2020-10-05T17:54:29Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![eduzen](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/eduzen/32/121_2.png) [@eduzen](https://pyar.discourse.group/u/eduzen)\
**Post date:** [5 Octubre, 2020 17:54 UTC](https://pyar.discourse.group/t/streaming-de-video-con-gunicorn-django/461/1 "2020-10-05T17:54:29Z")

</div>

Holas,

estoy trantando de stremear una webcam con django. Cuando utilizo el `runserver` de desarrollo puedo abrir dos ventanas de chrome y tengo el video en ambas ventanas. Pero cuando lo quiero ejecutar con Gunicorn solo lo puedo hacer de a una ventana a la vez, por qué puede ser?

El read de opencv lo tengo en un thread (siguiendo las recomendaciones que hay por internet)

Gracias!

```auto
from concurrent import futures
from functools import wraps

import cv2

video_capture = cv2.VideoCapture(0)

def threaded(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        with futures.ThreadPoolExecutor() as executor:
            future = executor.submit(func)
        frame = future.result()
        return frame

    return wrapper

@threaded
def read_camera():
    if not video_capture.isOpened():
        raise RuntimeError()

    status, frame = video_capture.read()

    if status:
        return frame

    raise RuntimeError()

def stream_camera():
    while True:
        frame = read_camera()
        status, jpeg = cv2.imencode(".jpg", frame)

        if not status or jpeg is None:
            raise RuntimeError

        yield b"--frame\r\nContent-Type: image/jpeg\r\n\r\n%b\r\n\r\n" % jpeg.tobytes()

@gzip.gzip_page
def video(request):
    return StreamingHttpResponse(
        stream_camera(),
        content_type="multipart/x-mixed-replace;boundary=frame",
    )

```

---

<div class="post-metadata">

**Author:** ![eduzen](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/eduzen/32/121_2.png) [@eduzen](https://pyar.discourse.group/u/eduzen)\
**Post date:** [6 Octubre, 2020 11:28 UTC](https://pyar.discourse.group/t/streaming-de-video-con-gunicorn-django/461/2 "2020-10-06T11:28:46Z")

</div>

Bueno ya logre hacerlo funcionar. Hay que correr `gunicorn` o `uwsgi` con la opcion de 1 solo worker/proceso porque solo un proceso puede acceder a la camara al mismo tiempo. Si se quiere usuarios simultaneos/concurrentes hay que incrementar los threads `--threads 5` .
