Различия между версиями 1 и 2
Версия 1 от 2020-12-08 10:26:55
Размер: 2358
Редактор: FrBrGeorge
Комментарий:
Версия 2 от 2020-12-08 12:31:05
Размер: 2775
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 20: Строка 20:
  * `async def` + `yield` — совсем другое, это именно то, что кажется, ''специальные'' асинхронные генераторы, которые можно проходить `async for` (причём в конструкторах вида `[… async for i in асинхронный-гененратор …]` тоже)   * `async def` + `yield` — совсем другое, это именно то, чем кажется, ''специальные'' асинхронные генераторы, которые можно проходить `async for` (причём в конструкторах вида `[… async for i in асинхронный-гененратор …]` тоже)
Строка 41: Строка 41:
 * Параллелизм (внешний, следите за тредобезопасностью или не используйте треды)
 * Очереди (всякие)
 * Сеть (I/O, IPC и всё остальное), сигналы
 * Потоки (над этим всем)
 * Модификация образующего цикла
 * Вброс/перехват исключений
 * …

Асинхронные возможности Python

Асинхронность:

  • Явная (параллелизм) — в языке нет
  • Со скрытой активацией (обратные вызовы, callbacks) — всё зависит от mainloop
  • Сопрограммная — вот!

Модель

  • Как работает yield from

  • Ловля return из генератора с помощью yield from

  • Асинхронность как произвольное исполнение сегментов кода между yield-ами

    • Понятие образующего цикла (main loop)
    • Передача управления в main loop с помощью явного yield

    • Обмен данными с сегментами сопрограмм с помощью .send()

Async

  • async def ~== генератор

  • yield from ~== await

  • @types.coroutine — чтобы и yield и return (не доделали ещё?)

    • async def + yield — совсем другое, это именно то, чем кажется, специальные асинхронные генераторы, которые можно проходить async for (причём в конструкторах вида [… async for i in асинхронный-гененратор …] тоже)

Самое сложное — это логика образующего цикла.

Asyncio

  • Самое сложное — это логика образующего цикла
  • Самое ненужное — это логика образующего цикла (достаточно знать, как он работает, а не что делает)

  • Запрограммируем образующий цикл заранее, насуём туда инструментов
  • Упростим протокол управления до одного понятия — future

  • (asyncio specific) обмажем огромным количеством применений IRL

Основные понятия:

  • Manloop
  • Task
  • Future

И толстый-толстый слой шоколада!

  • Параллелизм (внешний, следите за тредобезопасностью или не используйте треды)
  • Очереди (всякие)
  • Сеть (I/O, IPC и всё остальное), сигналы
  • Потоки (над этим всем)
  • Модификация образующего цикла
  • Вброс/перехват исключений

Д/З

Задач на EJudge нет.

TODO

LecturesCMC/PythonIntro2020/14_Async (последним исправлял пользователь FrBrGeorge 2020-12-10 15:26:51)