Ich versuche, einen Python-Webserver mit Django und Waitress zu erstellen, möchte aber wissen, wie Waitress mit gleichzeitigen Anforderungen umgeht und wann Blockierungen auftreten können.
Während in der Waitress-Dokumentation erwähnt wird, dass mehrere Worker-Threads verfügbar sind, enthält sie nicht viele Informationen darüber, wie sie implementiert sind und wie sich die Python-GIL auf sie auswirkt (Hervorhebung meiner eigenen):
Wenn ein Kanal feststellt, dass der Client mindestens eine vollständig gültige HTTP-Anforderung gesendet hat, plant er eine "Aufgabe" mit einem "Thread-Dispatcher". Der Thread-Dispatcher verwaltet einen festen Pool von Worker-Threads, die für die Client-Arbeit verfügbar sind (standardmäßig 4 Threads). Wenn ein Arbeitsthread verfügbar ist, wenn eine Aufgabe geplant ist, führt der Arbeitsthread die Aufgabe aus. Die Task hat Zugriff auf den Kanal und kann in den Ausgabepuffer des Kanals zurückschreiben. Wenn alle Arbeitsthreads verwendet werden , warten geplante Aufgaben in einer Warteschlange darauf, dass ein Arbeitsthread verfügbar wird.
Es scheint auch nicht viele Informationen über Stackoverflow zu geben. Aus der Frage "Ist Gunicorns gthread asynchroner Arbeiter analog zu Kellnerin?" ::
Die Kellnerin verfügt über einen asynchronen Master-Thread, der Anforderungen puffert und jede Anforderung nach Abschluss der Anforderungs-E / A in einen ihrer Sync-Worker-Threads einreiht.
Diese Aussagen richten sich nicht an die GIL (zumindest nach meinem Verständnis), und es wäre großartig, wenn jemand näher darauf eingehen könnte, wie Arbeitsthreads für Waitress funktionieren. Vielen Dank!