Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Я не люблю asyncio

Я не люблю asyncio

Павел Камаев ("Лаборатория Касперского") @ MoscowPython Meetup 53
"Самое крупное нововведение в Python за последние годы — это, конечно, асинхронный фреймворк asyncio. Основной вопрос, который задают себе все разработчики в связи с его выходом, — а насколько он готов к использованию? В этом докладе я хочу поделиться своим опытом работы с asyncio и его экосистемой в Python.

Немного о себе. Занимаюсь асинхронным переводом с менеджерского на питоний последние четыре года. Сеньор, тролль, веб-девелопер. Люблю микролиты и моносервисы, держу дома кита Докера, кролика Эмку и работника зоопарка из племени апачей".
Видео: http://www.moscowpython.ru/meetup/53/I-dont-like-asyncio/

Moscow Python Meetup

February 22, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Переезд с Django на async Библиотеки Django aiohttp jinja2 jinja2

    + aiohttp_jinja2 Django ORM peewee + peewee-async psycopg2 aiopg/asyncpg
  2. Dependency hell • Промежуточная вспомогательная бибилиотека – my_package → my_helpers

    → aiohttp < 1.0 – my_package → aiohttp_jinja2 → aiohttp >= 0.18 • Мейнтейнеры aiohttp разделяют и властвуют – aiohttp < 2.0 → yarl >= 0.8 – aiohttp == 2.2 → yarl >= 0.11 • pipenv ???
  3. Все любят микросервисы! • … NoSQL • … очереди сообщений

    • … динамическое конфигурирование
  4. Усредненный рецепт • ElasticSearch • Apache Cassandra / MongoDB •

    Apache Kafka / RabbitMQ • Apache Zookeeper / Consul / etcd
  5. from db.nosql import cassandra • 2014-03-16 — python 3.4, provisional

    asyncio API • 2016-03-03 — DataStax PYTHON-507 CREATED • 2016-06-27 — python 3.5.2, incompatible API changes(asynchronous iterators) • 2016-12-23 — python 3.6, stable asyncio API • 2017-01-29 — aiocassandra 0.0.1 • 2017-03-09 — aiocassandra 1.0.3 • 2017-12-07 — DataStax PYTHON-841 IN PROGRESS • 2018-01-29 — DataStax PYTHON-841 RESOLVED • 2018-02-09 — aiocassandra 1.1.0
  6. from db.nosql import mongodb • Синхронный драйвер: pymongo • Асинхронный

    драйвер: motor • Минутка истории(до 2016-10): • > pip install 'motor==0.6' • Collecting motor==0.6 • Collecting greenlet>=0.4.0 (from motor==0.6) • Using cached greenlet-0.4.12-cp36-cp36m-manylinux1_x86_64.whl • Collecting pymongo==2.8.0 (from motor==0.6) • Installing collected packages: greenlet, pymongo, motor • Successfully installed greenlet-0.4.12 motor-0.6 pymongo-2.8
  7. from message_queues import rabbitmq • pika –поддержка asyncio с 0.11.0

    – AsyncioAdapter предоставляет интерфейс с callback • aio-pika – выросла из PR в pika с AsyncioAdapter – имеет собственную версию rabbimq tutorial(адаптация официального) – пока не поддерживает pika > 0.10 • aioamqp – не умеет отправлять сообщения с пустым телом – в вечном цикле обрабатывает фреймы в рамках одного подключения – некорректно работает с unicode • asynqp – publish синхронный
  8. from message_queues import kafka • aiokafka – поддерживает интерфейс async

    for – consumer разбит на 2 части: fetcher и непосредственно интерфейс consumer. fetcher не управляется пользователем.
  9. from configuration import consul Название Последняя версия Дата релиза Поддержка

    asyncio consulate 0.6.0 2015-07-22 − consul-kv 0.7.3 2017-09-03 − python-consul 0.7.2 2017-08-26 +
  10. from configuration.consul import python-consul • Магия генераторов – нечитаемые интерфейсы(нет

    декоратора coroutine) – сложно/невозможно использовать сложные рецепты • Нет продвинутых рецептов – распределенные блокировки – выборы лидера
  11. from configuration import zookeeper Название Последняя версия Дата релиза Поддержка

    asyncio pookeeper — 2013-01-01 :) zc.zk 2.1.0 2014-10-20 − kazoo 2.4.0 2017-06-14 − aiozk 0.5.3 2017-09-22 +
  12. from configuration.zookeeper import aiozk • порт zoonado на asyncio •

    сырой – print в коде – нет обработки некоторых сетевых ошибок • нет коммьюнити
  13. import testing • pytest: pytest-asyncio • unittest: asynctest – до

    0.11.0 не было поддержки async with в mock • nose: DEAD • nose2: ???
  14. Я ЛЮБЛЮ asyncio • 2016-12-23 — python 3.6.0, asyncio API

    объявлено стабильным • Большинство технологий имеют библиотеки для работы с ними из асинхронных приложений • Коммьюнити активно начинает использовать asyncio, поддерживает разные библиотеки