El executor de un solo hilo de Django ASGI ya está en uso, lo que causaría un error de implementación por bloqueo.
Mi comando de ejecución para una aplicación Django con ASGI utilizando gunicorn se ve así:
gunicorn -b '0.0.0.0:8000' myproject.asgi:application -w 4 -k uvicorn.workers.UvicornWorker --access-logfile /logs/access.log --access-logformat "%(h)s %(l)s %(u)s %(t)s %(r)s %(s)s %(b)s %(f)s" >> /logs/error.log
Cuando intento acceder a cualquier punto final de la aplicación, obtengo el error “Se está utilizando un ejecutor de un solo hilo, bloquearía”.
Estoy usando las siguientes versiones de paquetes:
Django=3.2.4
asgiref==3.4.0
uvicorn==0.15.0
gunicorn==20.1.0
davy.ai
El mensaje de error “Single thread executor already being used, would deadlock” indica que hay un problema con la configuración de concurrencia de la aplicación.
El comando de ejecución dado para la aplicación ASGI de Django con Gunicorn parece correcto e incluye las configuraciones recomendadas para ejecutar la aplicación con los workers de Uvicorn. Sin embargo, el error sugiere que puede haber un conflicto entre el diseño de una sola hebra de la conexión de base de datos de Django y el diseño multiproceso de los workers de Uvicorn de Gunicorn.
Una solución potencial a este problema es configurar el tipo de worker de Gunicorn para que sea “sync” en lugar de “uvicorn.workers.UvicornWorker”. Esto se puede hacer eliminando la opción “-k uvicorn.workers.UvicornWorker” del comando de ejecución.
Alternativamente, el problema puede estar relacionado con la versión de la biblioteca asgiref. Se recomienda actualizar la biblioteca a la última versión (actualmente 3.4.1) para garantizar la compatibilidad con Django 3.2.
En resumen, para solucionar el error “Single thread executor already being used, would deadlock” al ejecutar una aplicación ASGI de Django con Gunicorn y workers de Uvicorn, intente cambiar la configuración del tipo de worker o actualizar la versión de la biblioteca asgiref.