Soy consciente de que Django es un ciclo de solicitud/respuesta y Django Channels es diferente, mi pregunta no es sobre esto.
Sabemos que uWSGI/gunicorn crea procesos de trabajo y se puede configurar para ejecutar cada solicitud en subprocesos. Para que pueda atender 10 solicitudes "simultáneamente" (no en paralelo) en un solo proceso de trabajo uWSGI con 10 subprocesos.
Ahora supongamos que cada cliente web quiere crear un websocket usando canales de Django, desde mi comprensión limitada (con implementación estándar), que procesará cada mensaje en un solo hilo, lo que significa que para procesar x cantidad de conexiones al mismo tiempo, necesita x cantidad de procesos de trabajo de canal. Sé que alguien sugerirá aumentar la cantidad de procesos, no estoy aquí para debatir sobre esto.
Mi pregunta es simplemente, ¿hay alguna biblioteca existente que haga un trabajo similar con uWSGI/gunicorn que ejecute funciones de consumidor en subprocesos?
Creo que estás preguntando por Daphne . Se menciona en el propio documento de canales .
Daphne ofrece una opción para escalar el proceso mediante un FD compartido . Desafortunadamente, no está funcionando como se esperaba.
En este momento, una mejor alternativa es usar uvicorn . Puede ejecutar múltiples trabajadores con
$ uvicorn project.asgi --workers 4He estado usando esto en producción y parece lo suficientemente bueno.