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

Что внутри у питона: откуда быть пошел async

Что внутри у питона: откуда быть пошел async

Злата Обуховская (Teamlead в Nvidia) @ MoscowPython Meetup 61

"В этой части мы сконцентрируем внимание на процессе интерпретации. Подробно разберем внутренние структуры интерпретатора. Рассмотрим, как в язык добавили слово async, и какие изменения в виртуальной машине пришлось сделать для этого".

Видео: http://www.moscowpython.ru/meetup/61/inside-python2/

Moscow Python Meetup

November 29, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Проблемы с тредами (помимо GIL) Racing, deadlocks, starvation Нельзя контролировать

    планировщик ОС Переключение контекста дорогая операция
  2. Проблемы с gevent легко блокирует остальные гринтреды, т.к. не умеет

    явно передавать контроль манкипатчинг делать в правильные моменты
  3. Проблемы callbacks не могут быть очень долгими нужно таскать стейт

    коллбэка callback hell непонятно, как обрабатывать исключения
  4. Генератор мог бы помочь с асинхронностью умеет хранить контекст умеет

    явным образом возвращать выполнение умеет обрабатывать исключения можно писать чистенький код
  5. Питон 3.3 и виртуальная машина Изменения в грамматике, парсере, кодогенераторе

    Поменяли ceval.c (YIELD_FROM) Поменяли PyGenObject (gen_iternext и gen_throw)
  6. asynс и await Появились Awaitable объекты Корутины на генераторах умеют

    yield Корутины на async def умеют await Есть проверка, чтобы обычные генераторы не использовались, как асинхронные