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

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

Я ищу способ обслуживать 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 ]

0 голосов
/ 30 мая 2011

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

0 голосов
/ 27 января 2011

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

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

...