Обновить
92
Андрей Светлов@svetlov

Пользователь

81
Подписчики
Отправить сообщение
n += 1 является именно атомарной операцией, по крайней мере для int и float. Не стоит писать неверные утверждения, это запутывает.

Для пользовательских типов данных — да, чаще всего будет неатомарно.
1. Не используйте, пожалуйста, термин «планировщик green thread-ов» — такого объекта в gevent не существует.
2. Файловое i/o не имеет неблокирующей реализации в gevent — потому что linux kernel такое не умеет.
libevent -> libev
ресурсоемкие -> блокирующие ввод-вывод (IO bound)
Потому что gevent основан на серой магии greenlet.
Которая имеет свои подводные камни и особенности, и никогда не войдет в стандартную библиотеку.
Потому что % не очень хорош, str.format лучше.
Это если коротко.
% никогда не уйдет из Python 3, если что.
Это не рекомендованный способ, но им можно пользоваться без опасений что разработчики его когда-то уберут (не в ближайшие двадцать лет — точно).
Если что, aiorest 0.2.0 сломал обратную совместимость: github.com/aio-libs/aiorest/pull/18
Так было надо.
docs.python.org/dev/library/ast.html#ast.literal_eval безопасный. Правда, именно поэтому умеет совсем немного.
ложатся прекрасно. Просто request-reply должен быть самый сложный и медленный для aiorpc.
Сделал тесты: asvetlov.blogspot.com/2014/04/aiozmq-benchmark.html
Если что непонятно — спрашивайте
про потоки не понял. Имеются в виду threading.Thread или что-то другое?
Ok, так согласен
Если советуете выкинуть twisted, то почему не распространаете совет и на tornado?
asyncio принципиально похож на twisted/tornado ровно в том смысле, в каком программа на ассемблере похожа на программу на C: они ведь обе компилируются в машинный код!

С корутинами я хочу (и уже имею) несколько критически важных вещей:
1. Линейная структура кода. Все известные мне программисты мыслят линейно. Их можно научить думать в терминах обратных вызовов (я в свое время писал и для twisted и для tornado если что) — но это не совсем легко. В результате программа читается плохо и как минимум обработка ошибок очень страдает. Непойманные исключения улетают в никуда, это повсеместная проблема (кто-то где-то да забудет). Если исключение таки поймано, то у него ужасный traceback. В twisted предпринимали серьезные усилия чтобы этот traceback выглядел читаемо. С частичным успехом.
2. Удобная отладка. Если остановился на строчке с yield from, то 'next' переходит на следующую строку а не начинает отлаживать внутренности event loop.
3. Продуманный набор функций/классов для запуска, ожидания, отмены корутин, таймауты, блокировки, очереди и пр. В tornado.gen есть только очень куцый минимум того, что работает в asyncio

P.S.
twisted был великой библиотекой. Десять лет назад.
tornado, пожалуй, получше twisted. Но сравнение с asyncio с треском проигрывает. Единственное преимущество на сегодня — tornado.web, но за полгода и для asyncio появится достойная альтернатива (собственно говоря они уже есть но каждая в чем-то недоделана).
ORM — нет, не планирую. По крайней мере сейчас мне это не нужно
1. Пожалуйста.
2. Я начинал писать серию таких статей но застрял на полпути. Сделать что-то толковое требует немалого времени и драйва. Иначе ничего не выходит. Если статьи и появятся то точно не на хабре а у меня в блоге. Хабр ревнив и требует эксклюзивности, а это не нравится уже мне.
На callbacks писать не надо, это сложно и вообще может быть нужно только разработчикам библиотек. Если либы хорошие то пользователю кроме yield from ничего требоваться не должно.
P.S. Что такое AMA на Реддите в r/python не знаю, так что, наверное, замутить не хочу.
Вот вы сами и ответили на вопрос «зачем» — чтобы использовать библиотеки, сделанные для других систем. Причем если я создаю что-то для asyncio это можно будет использовать и в tornado. А наоборот не получится. Какую библиотеку делать перспективней?

P.S. Вообще-то торнадо научилась понимать asyncio event loop не так уж и давно — три месяца назад :)
На github.com/Alesh/aqua смотреть не на что, извините.

Возвращаясь к теме. Написал статью «почему нет http в asyncio»: asvetlov.blogspot.com/2014/04/wsgi.html
Для того чтобы бенчмарки были корректными нужно брать tornado+bottle. Потому что WSGI контекст для bottle будет потяжелее не-WSGI контекста tornado.
Ссылка на pool остается в главном процессе.
Дочерние не закрываются, потому что главный может добавить в pool еще работу после того как дочерние отработали предудущие задания. С точки зрения дочернего процесса без дополнительных инструкций не понять, предполагает ли главный процесс как-то еще использовать pool или нет.

Информация

В рейтинге
Не участвует
Откуда
Киев, Киевская обл., Украина
Зарегистрирован
Активность