Estoy tratando de construir un servidor web Python usando Django y Waitress, pero me gustaría saber cómo Waitress maneja las solicitudes concurrentes y cuándo puede ocurrir el bloqueo .
Si bien la documentación de Waitress menciona que hay varios subprocesos de trabajo disponibles, no proporciona mucha información sobre cómo se implementan y cómo los afecta Python GIL (énfasis mío):
Cuando un canal determina que el cliente ha enviado al menos una solicitud HTTP válida completa, programa una "tarea" con un "despachador de subprocesos". El despachador de subprocesos mantiene un grupo fijo de subprocesos de trabajo disponibles para hacer el trabajo del cliente (de manera predeterminada, 4 subprocesos). Si un subproceso de trabajo está disponible cuando se programa una tarea, el subproceso de trabajo ejecuta la tarea. La tarea tiene acceso al canal y puede volver a escribir en el búfer de salida del canal. Cuando todos los hilos de trabajo están en uso , las tareas programadas esperarán en una cola para que un hilo de trabajo esté disponible.
Tampoco parece haber mucha información sobre Stackoverflow. De la pregunta "¿El trabajador asincrónico de greadread de Gunicorn es análogo a la camarera?" :
La camarera tiene un subproceso maestro asíncrono que almacena las solicitudes y almacena cada solicitud en uno de sus subprocesos de trabajo de sincronización cuando finaliza la E / S de la solicitud.
Estas declaraciones no abordan el GIL (al menos desde mi entendimiento) y sería genial si alguien pudiera dar más detalles sobre cómo funcionan los hilos de trabajo para Waitress. ¡Gracias!