LINUX.ORG.RU

Подскажите, что почитать по асинхронному программированию на питоне.


0

0

Подскажите, что почитать по асинхронному программированию на питоне. Интересует как это реализуется (например сопрограммы) с помощью чего -генераторы, гринлены, другое что-то?

Буду признателен за хорошие ссылки,


Ответ на: комментарий от Kpoxman

Братья я когда писал этот пост я еще хотел добавить, не надо мне давать ссылку на Twisted, вы реально думаете, что я эту доку не почитал прежде чем задать этот вопрос? Меня не твистед как таковой интересуед. А как это делается в принципе, конкретные какието дела. Может кто-то делал уже и может дать ссылку на доки по которым учился.

2 vga: Этот ПЭП я тоже читал, есть еще что добавить? Более того я уже и гринлеты потестил и понимая в чем их отличие от стандартных генераторов.

Хотелось бы почитать мнение людей кто это юзал реально...

Alesh
() автор топика
Ответ на: комментарий от linuxfan

>> А как это делается в принципе, конкретные какието дела.

Linux: man epoll, epoll_ctl, epoll_wait

Ты знаешь я как бы и про епул, слыхал ))) Хотелось бы не ман, я знаю эту команду ))) Хотелось бы также и платформо независимый вариант ))) На ман не надо плиз, я знаю что это ) Меня интересует конкретное введение в это дело, ман не надо, док на твистед тоже не надо )))

Alesh
() автор топика
Ответ на: комментарий от Alesh

Этот ПЭП я тоже читал,

Телепаты в отпуске, как давно всем известно.

есть еще что добавить?

Тебе уже много написали, и все правильно вобщем-то.

Linux: man epoll, epoll_ctl, epoll_wait

Что еще написать - непонятно даже. Потому что напишешь, а ты опять скажешь «я читал».

Хотелось бы почитать мнение людей кто это юзал реально...

Я юзаю, реально, каждый день, правда не в питоне, а js, но это не суть важно, генераторы там слизаны с питона. Мнение - удобно, код понятный, проблемы с синхронизацией практически отсутствуют. Мне хватило только http://www.neilmix.com/2007/02/07/threading-in-javascript-17/ и вышеприведенных манов, чтобы понять, как с этим работать и сделать свой фреймворк для асинхронного io. Позже посмотрел твистед и понял, что в общем-то я тупо его свелосипедил на js. Еще вот это читал - http://www.ibm.com/developerworks/library/l-pythrd.html, но это про питон до того самого пепа, то есть неактуально.

Про платформонезависимо - здесь сложнее, можно что-то типа libevent или libev испольновать, select есть под виндой для сокетов, если не для сокетов, то в цигвине есть и для других вещей, правда очень страшно.

vga ★★
()
Ответ на: комментарий от vga

> Я юзаю, реально, каждый день, правда не в питоне, а js, но это не суть важно, генераторы там слизаны с питона.

Ты юзаешь JS на серверной части? Можно подробнее?

Это http://www.ibm.com/developerworks/library/l-pythrd.html сенкс, читаю ...

если не для сокетов, то в цигвине есть и для других вещей, правда очень страшно.

можно какую-то ссылку на пример как в циквине юзать в этом плане, что-то кроме сокетов?

Alesh
() автор топика
Ответ на: комментарий от Alesh

>Меня интересует конкретное введение в это дело, ман не надо, док на твистед тоже не надо )))

Ты не понимаешь, для чего нужна событийная модель ввода-вывода? Тогда тебе никакие маны не помогут.

linuxfan
()
Ответ на: комментарий от Alesh

>Хотелось бы также и платформо независимый вариант

Кстати, забыл добавить: хоть в одной платформе разберись для начала. Писать кроссплатформенный код — это искусство. А эникеить на пистоне любая домохозяйка сможет.

linuxfan
()
Ответ на: комментарий от linuxfan

>> Меня интересует конкретное введение в это дело, ман не надо, док на твистед тоже не надо )))

Ты не понимаешь, для чего нужна событийная модель ввода-вывода? Тогда тебе никакие маны не помогут.

Что такое событийная модель, я усвоил еще когда для Вынь 3.1 программировал. Так что мальчик, засунь свой пренебрежительно-покровительственный стиль постов себе в какую-нибудь щель на выбор )))

Alesh
() автор топика
Ответ на: комментарий от Alesh

Надеюсь, всё у тебя будет хорошо.

anonymous
()
Ответ на: комментарий от true_admin

> Вопрос поставлен некорректно. Как реализуешь так и будет.

Да пожалуй некорректно - лисперы достали «ман пул епул бепул» ;)

Попробую по конкретнее поставить вопрос. Хочется почитать статью описывающую подходы к созданию асинхронных приложений на питоне. Какие библиотеки используется для этого, их сравнение. Интересует организация кода в сопрограммах, что бы избежать узких мест (превращающих асинхронное приложение в синхронное))). Как взаимодействовать с блокирующими ресурсами, например запросы к БД. Как-то так.

Alesh
() автор топика
Ответ на: комментарий от Alesh

>Что такое событийная модель, я усвоил еще когда для Вынь 3.1 программировал

Оно и видно, что последний раз у тебя это было с вынь 3.1: «Подскажите доку как, типа, написать, чтобы все было крута? Мануалы по библиотечным функциям читал, но там не написано, как зделать правельно. Памагите! )))»

И да, узким местом в пистоне у тебя будет пистон. Если тебе понадобился epoll/kqueue, значит нужно обслуживать «от тысячи открытых соединений». Это уже не для пистоновской производительности с его-то глобальными локами.

linuxfan
()
Ответ на: комментарий от linuxfan

> И да, узким местом в пистоне у тебя будет пистон.

Если тебе не нравится пистон и ничего кроме print «Hello Word!» на нем не писал, какого ты лезешь в топик где в заголовке есть слово «питон»? Посрать захотелось? У тебя дома туалет сломался? Свали уже с топика. «Писать кроссплатформенный код — это искусство.» Иди позанимайся искусством )))

Это уже не для пистоновской производительности с его-то глобальными локами.

Погугли на тему проектов написанных на питоне, и перестань уже газифицировать лужи.

Alesh
() автор топика
Ответ на: комментарий от Alesh

> Twisted это не совсем то, что подходить под мой вопрос, Нее?

Не уверен, надо ли, но напишу (на случай, если вы не разобрались в Twisted):

Twisted это как раз библиотека для асинхронного программирования на Python. Умеет все, от select до epoll (в том, что касается сокетов).

Если вы пишете на Python, то в libevent точно лезть не стоит. Это за вас сделает Twisted.

Kpoxman ★★
()
Ответ на: комментарий от Alesh

> Какие библиотеки используется для этого, их сравнение.

Для Python - только Twisted. Большего и не нужно.

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

Синхронные куски кода (если они занимают значительное время) можно выполнить в отдельном процессе или в отдельном потоке. В Twisted есть для этого поддержка.

Как взаимодействовать с блокирующими ресурсами, например запросы к БД. Как-то так.

В Twisted есть wrapper над dbapi, который создает пул тредов (по треду на коннект) - т.е. выполняет эти синхронные куски кода в отедльном потоке. Это решение «в лоб». Для каждого конкретного случая возможны true «асинхронные» решения. Например, pgasync для Postgresql.

Kpoxman ★★
()
Ответ на: комментарий от Kpoxman

> Twisted это как раз библиотека для асинхронного программирования на Python. Умеет все, от select до epoll (в том, что касается сокетов).

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

Если вы пишете на Python, то в libevent точно лезть не стоит.

Я как раз смотрю сейчас на libevent ;) Вернее на gevent, пока мне это кажется более понятным и менее монстровитым, чем твистед. Не можете прокомментировать gevent, если разбирались с ним.

Как изучали этот вопрос, маны? Или попадались какие-то более-менее цельные статьи?

Alesh
() автор топика

Ближайшая бумажная книжка по питону. Каждый раз так поступаю при необходимости - помогает.

Для C тоже работает, а вот для C++ - нет... слабоизученный недостаток метода...

t184256 ★★★★★
()
Ответ на: комментарий от Alesh

> Кажется, твистед более заточена на сетевые приложения, меня кроме этого еще интересует расчет состояний набора взаимодействующих объектов.

В общем, надо определиться:

Нужно ли вам async IO (а-ля libevent, асинхронные сокеты и т.д.)? Если да, то проще через Twisted.

Если вам нужно подобие Erlang-a, то другое дело.

Deferreds Twisted-а чем-то похожи на Greenlets. Но с последними я не работал. Про gevent тоже первый раз слышу.

Kpoxman ★★
()
Ответ на: комментарий от t184256

> Ближайшая бумажная книжка по питону. Каждый раз так поступаю при необходимости - помогает.

Когда к тебе можно подойти за книжка по питону, где есть раздел посвещенный асинхронному программированию с использованием евент модели?) Ну или хотя бы дай ее название что ли.

Alesh
() автор топика
Ответ на: комментарий от Kpoxman

> eferreds Twisted-а чем-то похожи на Greenlets. Но с последними я не работал. Про gevent тоже первый раз слышу.

gevent насколько я успел понять понять легковесная обвертка над libevent, расширен greenlet, есть так же сетевые дела - асинхронный http и wsgi сервера. greenlet уже попробовал - понравилось. gevent сейчас ставлю, пока упирается )

Alesh
() автор топика
Ответ на: комментарий от Alesh

На первый взгляд Gevent выглядит попроще чем Twisted. Но по сути то же самое. Несколько более похоже на Erlang-овские процессы.

Меня смущает в Gevents методы типа serve_forever в примерах. Т.е. Запустил ты HTTP сервер и все. В Twisted можно в одном процессе запустить хоть по 5 HTTP и по 10 TCP серверов.

Насчет того, чтобы посмотреть, лучше начать отсюда. http://twistedmatrix.com/documents/current/core/howto/index.html

В любом случае рекомендую ознакомиться с Twisted. Он более распространен, много чем поддерживается.

Kpoxman ★★
()
Ответ на: комментарий от Alesh

В стандартной либе есть только asyncore и его обёртка asynchat которые используют select/poll на неблокируемых сокетах. В общем, ничего интересного.

Есть всякие twisted которые ушли сильно дальше.

Хочется почитать статью описывающую подходы к созданию асинхронных приложений на питоне.

Точно так же как и на любом другом ЯП. Спецлитературы нет и она не нужна, имхо.

(превращающих асинхронное приложение в синхронное)))

Избегай длительных по времени операций в том треде что обрабатывает события.

Как взаимодействовать с блокирующими ресурсами, например запросы к БД

Не смотрел, это действительно интересно. Хотя, тут только два варианта: или стандартный драйвер уже имеет механизмы для этого или допиливать его чтобы он наружу высовывал fd на котором можно уже select/etc делать.

Я считаю что это не тот вопрос над которым стоит прям сильно заморачиваться. Просто один из многих паттернов программирования, простой для понимания, среднесложный для реализации.

true_admin ★★★★★
()
Ответ на: комментарий от Alesh

> > Linux: man epoll, epoll_ctl, epoll_wait

Ты знаешь я как бы и про епул, слыхал )))

ZOMG, быдло на лоре? Это надо же, сколько мусора в одном предложении - пунктуации нет, слово poll - это вовсе не pool, да ещё и идиотские слепые смайлы.

Хотелось бы не ман, я знаю эту команду )))

А что не пользуешься, раз знаешь? А, кажется понимаю, ты не знаешь английского.

Хотелось бы также и платформо независимый вариант )))

Вариант чего?

На ман не надо плиз, я знаю что это )

Да, все поняли, что ты не способен понять документацию

Меня интересует конкретное введение в это дело,

Ох ты ж блин, введение, да ещё и «конкретное»? Ты о чём?

ман не надо,

Хорошо-хорошо, все уже поняли, что тебе нужен пример уровня дет-сада.

anonymous
()
Ответ на: комментарий от anonymous

>>> Linux: man epoll, epoll_ctl, epoll_wait

Ты знаешь я как бы и про епул, слыхал )))

ZOMG, быдло на лоре? Это надо же, сколько мусора в одном предложении - пунктуации нет, слово poll - это вовсе не pool, да ещё и идиотские слепые смайлы.

майлики тебе мои не наравится, ну извини ))) Да ладна линухфан, логинься и утони уже в потоках говна как мужчина )))

Alesh
() автор топика
Ответ на: комментарий от val-amart

> (например сопрограммы)

stackless. почитай статьи Дэвида Мерца.

Название не вспомнишь? Из близкого по теме нашел только: «Итераторы и простые генераторы» - это не совсем то.

Alesh
() автор топика
Ответ на: комментарий от true_admin

> Я считаю что это не тот вопрос над которым стоит прям сильно заморачиваться. Просто один из многих паттернов программирования, простой для понимания, среднесложный для реализации.

В сущности да, согласен. Но учитывая наличие GIL, использование сопрограмм вместо средов - должно заметно улучшать ситуацию. И видимо это так, асинхронные вебсервера написанные на питоне (например tornado) действительно заметно шустрее средовых серверов http://www.tornadoweb.org/documentation#Perfomance. И разработчики напрямую связывают это с асинхронной архитектурой.

Alesh
() автор топика
Ответ на: комментарий от Alesh

точно не помню, но из серии charming python, она есть ibmDw. там есть пример работы с сопрограммами.

val-amart ★★★★★
()
Ответ на: комментарий от Alesh

Не согласен. Именно из-за GIL многотредовые pure-python приложения не получат больше CPU чем их асинхронные аналоги при cpu-bound-нагрузке. Но если будут блокируемые операции то тут многотредовые выиграют.

Кроме того, в C-модулях GIL нужно включать только при выполнении питоновских функций, во всех остальных случаях ты можешь паралельно обрабатывать данные (http://docs.python.org/c-api/init.html#thread-state-and-the-global-interprete...).

Я рассматриваю асинхронные приложения как способ избежать большого кол-ва тредов и гемора с синхронизациями.

true_admin ★★★★★
()
Ответ на: комментарий от Kpoxman

> Меня смущает в Gevents методы типа serve_forever в примерах. Т.е.

Запустил ты HTTP сервер и все. В Twisted можно в одном процессе
запустить хоть по 5 HTTP и по 10 TCP серверов.

serve_forever() блокирует только текущий гринлет. Новые гринлеты создаются при помощи gevent.spawn().

Кроме того, у http сервера есть асинхронный метод start().

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.