как делать асинхронные http запросы с epoll и python 3.1 - PullRequest
3 голосов
/ 22 марта 2010

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

есть интересная страница http://scotdoyle.com/python-epoll-howto.html о том, как выполнять асинхронное / неблокирующее / AIO http обслуживание в python 3.

существует веб-сервер tornado , который включает неблокирующий http-клиент. мне удалось портировать части сервера на python 3.1, но реализация клиента требует pyCurl и , похоже, есть проблемы (с одним участником, заявляющим, что «Libcurl такая боль» и, глядя на невероятно некрасивую страницу pyCurl, сомневаюсь, что pyCurl появится в py3 + в ближайшее время).

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

о, и я чувствую, что нить ужасна. нет потоков. я использую без стеков .

люди, заинтересованные в теме асинхронного http, не должны пропустить этот доклад Питера Портанте на PyCon2010 ; также представляет интерес ключевая нота , где спикер Антонио Родригес в какой-то момент подчеркивает важность наличия современных библиотек веб-технологий прямо в стандартной библиотеке.

edit может быть много способов достижения высокой пропускной способности при небольшом потреблении ресурсов. однако, это не только я, кто думает, что отказываются от потоков (и других, частично устаревших, методов); люди из проекта gip skipfish , похоже, думают так же: они говорят, что skipfish использует

Мультиплексирование однопоточное, полностью асинхронный сетевой ввод / вывод и данные модель обработки, которая устраняет управление памятью, планирование и IPC неэффективность присутствует в некоторых многопоточные клиенты.

Ответы [ 4 ]

0 голосов
/ 04 марта 2013

Circuits имеет поддержку epoll и включает в себя асинхронный клиент # 50.

http://circuitsframework.com/

0 голосов
/ 24 марта 2010

В Python 3 отсутствуют библиотеки.Вы, кажется, заинтересованы в библиотеках, которые помогут вам делать что-то, так почему же именно Python 3 решает вашу проблему?

0 голосов
/ 14 апреля 2010

FWIW, у меня есть библиотека по адресу: http://github.com/mnot/nbhttp/

Клиентская часть находится в производстве как часть redbot.org.

Я не пробовал ее в Python 3, ноэто может помочь в качестве основы для вашей работы.

Приветствия,

0 голосов
/ 22 марта 2010

В этот опрос , месяцы назад, Джампаоло Родола сказал

У меня есть патч для добавления epoll () поддержка, которая почти готова (asyncore поддерживает poll (), не epoll ()), это просто вопрос написание тестов.

Я не уверен, где найти этот патч, но кажется достаточно простой задачей, чтобы его можно было легко перенести в asyncore (стандартный подход библиотеки Python к асинхронным серверам и клиентам - конечно, далеко позади Twisted или Торнадо, но это то, что есть у stdlib; -).

...