Ich habe einen HTTP-Server mit Threads (mit Python-Threads) eingerichtet, indem ich eine Klasse erstellt habe, die von HTTPServer und ThreadingMixIn erbt:
%Vor%Ich habe eine Handler-Klasse, die von BaseHTTPRequestHandler erbt, und ich starte den Server mit etwas wie diesem:
%Vor%Das ist alles ziemlich einfach. Das Problem, auf das ich stoße, ist, dass ThreadingMixIn, ForkingMixIn oder andere die Anfrage blockieren, damit der Request-Handler zurückkehrt. Dies kann leicht durch die Implementierung dieses Beispielcodes gesehen werden:
%Vor%Wenn der Server diese gleichzeitig verarbeitet, wären wir in der Lage, zwei Anfragen zu senden und zu sehen, dass der Server beide GET-Anfrage-Handler eingibt, bevor er eine Antwort sendet. Stattdessen gibt der Server den GET-Anforderungshandler für die erste Anforderung ein, wartet auf die Rückkehr und gibt ihn dann für die zweite Anforderung ein (die zweite Anforderung benötigt also ~ 20 Sekunden anstelle von 10).
Gibt es einen einfachen Weg für mich, ein System zu implementieren, bei dem der Server nicht darauf wartet, dass der Handler zurückkehrt? Genauer gesagt versuche ich ein System zu schreiben, das darauf wartet, mehrere Anfragen zu empfangen, bevor es einen von ihnen zurückgibt (eine Art langes Polling) und Probleme aufzeigt, bei denen die erste Anfrage wartet, dass zukünftige Anfragen keine Verbindung zum Server herstellen >
ist genug. Ihr Client führt wahrscheinlich keine gleichzeitigen Anfragen durch. Wenn Sie die Anforderungen parallel ausführen, funktioniert der Thread-Server wie erwartet. Hier ist der Client:
%Vor%Und der entsprechende Server:
%Vor% Alle 10 Anfragen enden in 1 Sekunde. Wenn Sie ThreadingMixIn
aus der Serverdefinition entfernen, benötigen alle 10 Anfragen 10 Sekunden.
Tags und Links python simplehttpserver