ОБНОВЛЕНИЕ: после долгой работы с 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
- единственный способ, который имеет смысл в среде без стеков, совместно запланированной;
выполнимо в Stackless Python 3 благодаря стандартной библиотеке select epoll
(представленной в Py2.6; некоторые решения предпочитают libevent
, но это означает еще одно препятствие, как проект pyevent, похоже, имеет перестал развиваться на Py2.5 );
, к сожалению, по-прежнему не является предметом домашнего обихода, так как большинство людей полагается на блокировку HTTP.
Как это выглядит сейчас, мне нужно изучить основы программирования сокетов и запустить свой собственный HTTP сервер / клиентскую библиотеку. Я все еще уклоняюсь от этой задачи, поскольку у меня очень мало опыта в этой области, и я должен «повторить историю» таким образом.
Я был бы очень рад любым указателям. Я предпочитаю очень много решений, которые используют select.epoll
; Кажется, я помню, что он гораздо более масштабируем, чем старый asyncore
(но, возможно, у кого-то есть более точные данные по этому вопросу). Как минимум, решения должны работать на Ubuntu 9.10.