Przetwarzanie żądań symultanicznych / asynchronicznych za pomocą Python BaseHTTPServer

Skonfigurowałem serwer wątków HTTP (z wątkami Pythona), tworząc klasę dziedziczącą z HTTPServer i ThreadingMixIn:

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    pass

Mam klasę obsługi, która dziedziczy z BaseHTTPRequestHandler i uruchamiam serwer z czymś takim:

class MyHandler(BaseHTTPRequestHandler):
    ...

server = ThreadedHTTPServer(('localhost', 8080), MyHandler)
# Prevent issues with socket reuse
server.allow_reuse_address = True
# Start the server
server.serve_forever()

To wszystko jest całkiem proste. Problemem, który napotykam, jest to, że ThreadingMixIn, ForkingMixIn lub w inny sposób żądanie zamyka blokowanie programu obsługi żądań w celu zwrócenia. Można to łatwo zobaczyć, implementując ten przykładowy kod:

class MyHandler(BaseHTTPRequestHandler):
    def respond(self, status_code):
        self.send_response(status_code)
        self.end_headers()

    def do_GET(self):
         print "Entered GET request handler"
         time.sleep(10)
         print "Sending response!"
         respond(200)

Gdyby serwer przetwarzał je jednocześnie, moglibyśmy wysłać dwa żądania i zobaczyć, jak serwer wchodzi do obu modułów obsługi żądań GET przed wysłaniem dowolnej odpowiedzi. Zamiast tego serwer wejdzie do obsługi żądań GET dla pierwszego żądania, poczeka na jego powrót, a następnie wprowadzi go na drugi (więc drugie żądanie potrzebuje ~ 20 sekund na powrót zamiast 10).

Czy mogę w prosty sposób zaimplementować system, w którym serwer nie czeka na powrót programu obsługi? W szczególności próbuję napisać system, który czeka na otrzymanie kilku żądań przed zwróceniem któregokolwiek z nich (forma długiego odpytywania) i na problemy, w których pierwsze żądanie oczekiwania blokuje wszelkie przyszłe żądania połączenia z serwerem.

questionAnswers(1)

yourAnswerToTheQuestion