Обработка одновременных / асинхронных запросов с помощью Python BaseHTTPServer

Мы настроили многопоточный (с потоками Python) HTTP-сервер, создав класс, унаследованный от HTTPServer и ThreadingMixIn:

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    pass

У меня есть класс обработчика, который наследуется от BaseHTTPRequestHandler, и я запускаю сервер примерно так:

class MyHandler(BaseHTTPRequestHandler):
    ...

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

Это все довольно просто. Проблема в том, что яЯ сталкиваюсь с тем, что ThreadingMixIn, ForkingMixIn или иным образом запрос завершает блокировку обработчика запроса для возврата. Это легко увидеть, реализовав этот пример кода:

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)

Если бы сервер обрабатывал их одновременно, мы могли бы отправить два запроса и увидеть, как сервер вводит оба обработчика GET-запроса перед отправкой любого ответа. Вместо этого сервер введет обработчик GET-запроса для первого запроса, дождется его возврата, а затем введите его для второго (поэтому для второго запроса требуется возврат ~ 20 секунд вместо 10).

Есть ли простой способ для меня реализовать систему, где сервер не 'ждать обработчика для возврата? В частности, яя пытаюсь написать систему, которая ожидает получения нескольких запросов перед возвратом любого из них (форма длительного опроса) и сталкивается с проблемами, когда ожидание первого запроса блокирует любые будущие запросы от подключения к серверу.

Ответы на вопрос(1)

Ваш ответ на вопрос