Обработка одновременных / асинхронных запросов с помощью 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).
Есть ли простой способ для меня реализовать систему, где сервер не 'ждать обработчика для возврата? В частности, яя пытаюсь написать систему, которая ожидает получения нескольких запросов перед возвратом любого из них (форма длительного опроса) и сталкивается с проблемами, когда ожидание первого запроса блокирует любые будущие запросы от подключения к серверу.