Estou tentando criar um servidor web python usando Django e Waitress, mas gostaria de saber como o Waitress lida com solicitações simultâneas e quando o bloqueio pode ocorrer.
Embora a documentação do Waitress mencione que vários threads de trabalho estão disponíveis, ela não fornece muitas informações sobre como eles são implementados e como o GIL do python os afeta (ênfase minha):
Quando um canal determina que o cliente enviou pelo menos uma solicitação HTTP válida completa, ele agenda uma "tarefa" com um "despachante de encadeamentos". O distribuidor de encadeamentos mantém um conjunto fixo de encadeamentos de trabalho disponíveis para realizar o trabalho do cliente (por padrão, 4 encadeamentos). Se um segmento de trabalho estiver disponível quando uma tarefa for agendada, o segmento de trabalho executará a tarefa. A tarefa tem acesso ao canal e pode gravar de volta no buffer de saída do canal. Quando todos os segmentos de trabalho estiverem em uso , as tarefas agendadas aguardarão na fila para que um segmento de trabalho fique disponível.
Também não parece haver muita informação sobre o Stackoverflow. Da pergunta "O trabalhador assíncrono de Gunicorn é análogo a Garçonete?" :
A garçonete possui um encadeamento assíncrono mestre que armazena em buffer as solicitações e enfileira cada solicitação a um de seus encadeamentos de trabalho de sincronização quando a E / S da solicitação é concluída.
Essas declarações não abordam o GIL (pelo menos no meu entendimento) e seria ótimo se alguém pudesse elaborar mais sobre como os threads de trabalho funcionam para a Waitress. Obrigado!