Прежде всего, я вообще не асинхронный эксперт, я только что исследовал тему один раз.
ИМХО, если вы используете XAMPP, тогда вы теряете возможность выполнения длинного опроса, потому что Apache использует поток / процессы (в зависимости от конфигурации) для каждого запроса.
Вам нужен неблокирующий веб-сервер, такой как Tornado , который позволяет разбивать запросы на две части, из которых вторая запускается при каком-либо событии, но при этом сервер может принимать последующие входящие запросы .
Пример из Документация Торнадо / лицензия /:
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
http = tornado.httpclient.AsyncHTTPClient()
http.fetch("http://friendfeed-api.com/v2/feed/bret",
callback=self.async_callback(self.on_response))
def on_response(self, response):
if response.error: raise tornado.web.HTTPError(500)
json = tornado.escape.json_decode(response.body)
self.write("Fetched " + str(len(json["entries"])) + " entries "
"from the FriendFeed API")
self.finish()
- насколько я знаю, это невозможно в Apache - в котором выборка является обычной частью обработчика запросов, которая, конечно, блокируется до тех пор, пока не завершится - так что вы заканчиваете замороженным потоком или процессом.
Другая известная библиотека для выполнения неблокирующих сервисов в Python - это Twisted , но я мало что знаю об этом, только то, что она также может помочь вам в обработке большого количества соединений только с один поток / процесс.