Processando Solicitações Simultâneas / Assíncronas com Base PythonHTTPServer

Eu configurei um servidor HTTP encadeado (com encadeamentos Python) criando uma classe que herda de HTTPServer e ThreadingMixIn:

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    pass

Eu tenho uma classe de manipulador que herda de BaseHTTPRequestHandler e eu inicio o servidor com algo como isto:

class MyHandler(BaseHTTPRequestHandler):
    ...

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

Tudo isso é bem simples. O problema que estou encontrando é que, ThreadingMixIn, ForkingMixIn ou caso contrário, a solicitação acaba bloqueando no manipulador de solicitação para retornar. Isso pode ser facilmente visto implementando este código de exemplo:

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)

Se o servidor estivesse processando-os simultaneamente, poderíamos enviar duas solicitações e ver o servidor inserir os dois manipuladores de solicitação GET antes de enviar qualquer resposta. Em vez disso, o servidor entrará no manipulador de solicitações GET para a primeira solicitação, aguardará a sua devolução e, em seguida, a inserirá na segunda (assim, a segunda solicitação levará ~ 20 segundos para retornar, em vez de 10).

Existe uma maneira simples de implementar um sistema em que o servidor não aguarde o retorno do manipulador? Especificamente, estou tentando gravar um sistema que aguarda receber várias solicitações antes de retornar qualquer uma delas (uma forma de pesquisa longa) e executar problemas em que a primeira solicitação em espera bloqueia a conexão de futuras solicitações ao servidor.

questionAnswers(1)

yourAnswerToTheQuestion