Любое готовое решение для базовых асинхронных (неблокирующих) HTTP-клиентов со Stackless Python 3.1?

ОБНОВЛЕНИЕ: после долгой работы с Py3, включая написание моего собственного асинхронного веб-сервера (после презентации, представленной Дейвом Бизли), я, наконец, выбросил Python (и огромный стек моего кода)- в пользу CoffeeScript, работающего на NodeJS. Проверьте это: GitHub (где вы найдете около 95% всего интересного кода в наши дни), npm (менеджер пакетов, который не может быть удобным для пользователя; хорошее избавление, easy_install, вы никогда не соответствовали своему имени), безумно огромное хранилище модулей (с огромным количеством новых материалов, публикуемых практически 24/7), огромное и динамичное сообщество, готовый асинхронный HTTP и обработка файлов... все это (благодаря V8) на одну треть скорости света - что не нравится? читать дальше пропаганда: "Будущее сценариев" (хостинг слайдов предоставлен http://spreewebdesign.de/).

Я ищу способ обслуживать HTTP (и выполнять HTTP-запросы) в асинхронном, неблокирующем режиме. Это кажется трудным сделать, когда вы решили использовать Stackless Python 3.1 (см. Здесь также документацию), как и я.

Есть несколько базовых примеров, таких как довольно информативная и подробная статья Как использовать Linux epoll с Python, и есть проект кода Google, названный stacklessexamples, который содержит некоторую ценную информацию (но не совместимый с Python 3.x код).

Итак, после многих дней исследований в Интернете и попыток собрать фрагменты, которые я нашел до сих пор: кто-нибудь знает о достаточно полезной асинхронной HTTP-библиотеке? Это не обязательно должно быть WSGI-совместимым (меня это не интересует).

Серверная часть должна быть в состоянии обслуживать несколько неблокирующих HTTP-запросов (и, возможно, выполнять основы обработки HTTP-заголовков); клиентская часть HTTP должна иметь возможность извлекать неблокирующим образом веб-контент с помощью HTTP-запросов (также выполняя базовую обработку заголовков, но не такие причудливые вещи, как авторизация или около того).

Мои исследования показали, что неблокирующий HTTP

  1. это единственный способ, который имеет смысл в стекируемой, совместно запланированной среде;

  2. выполнимо в Stackless Python 3 благодаря стандартной библиотеке select epoll (введено в Py2.6; некоторые решения предпочитают libevent, но это означает еще одно препятствие, так как проект pyevent, похоже, перестал развиваться на Py2.5);

  3. к сожалению, до сих пор не является предметом домашнего обихода, большинство людей полагается на блокировку HTTP.

Как это выглядит сейчас, мне нужно изучить основы программирования сокетов и запустить свой собственный HTTP сервер / клиентскую библиотеку. Я все еще уклоняюсь от этой задачи, поскольку у меня очень мало опыта в этой области, и я обязан "повторить историю" таким образом.

Я был бы очень рад любым указателям. Я предпочитаю очень много решений, которые используют select.epoll; кажется, я помню, что это гораздо более масштабируемо, чем старше asyncore (но, возможно, у кого-то есть более точные данные по этому вопросу). Как минимальное требование, решения должны работать на Ubuntu 9.10.

2 ответа

Неблокирующий случай HTTP очень хорошо обрабатывается с помощью витого, что делает создание ряда обратных вызовов и регистрацию этих обратных вызовов с отложенным. Искаженную документацию стоит проверить. Stackless использует микропотоки, но витая - это кодирование всей веб-инфраструктуры с использованием фрагментированного неблокирующего кода, связанного с обратными вызовами, ошибками и отложенными запусками, которые являются основным циклом реактора в одном потоке. Думаю, что это должно улучшить работу Async HTTP.

Я знаю, что это похоже на воскрешение мертвых (и поток, вероятно, уже давно решил его проблему), но для полноты стека доступно для 3.1.3:

Для получения информации о реализации HTTP-сервера с использованием stacklesssocket:

Другие вопросы по тегам