⇤ ← Версия 1 от 2020-12-08 10:26:55
2358
Комментарий:
|
2775
|
Удаления помечены так. | Добавления помечены так. |
Строка 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