Асинхронный Python

Урок 2 — Сквозь мусор к звёздам

Подготовлено онлайн-курсом

https://dvmn.org

Перейдите к следующему слайду, нажав кнопку Вправо

fly_garbage

перемещает фрагмент мусора

корутина

#1A. Наполнить орбиту мусором

fill_orbit_with_garbage

event loop

бесконечный цикл по корутинам

фрагмент мусора

вылетел за край поля

заказ на еще одну корутину

пауза

пауза . . .

наполняет орбиту мусором

корутина

пауза

время

запустить

запустить

fly_garbage

перемещает фрагмент мусора

корутина

#1B. Наполнить орбиту мусором

fill_orbit_with_garbage

event loop

бесконечный цикл по корутинам

мусор вылетел
за край поля

добавить корутину

наполняет орбиту мусором

корутина

время

1

2

3

await sleep

await sleep

4

5

6

7

9

8

10

await sleep

await sleep

Цифрами 1, 2 - 10 указана последовательность запуска корутин

Очередность указана не точно и может варьироваться

await sleep

добавить корутину

добавить корутину

запутить

запутить

fly_garbage

#3. Отследить положение мусора

fly_garbage

show_obstacles

obstacles

глобальная переменная
список всех препятствий на игровом поле

корутина

делает препятствия видимыми — рисует на экране их границу в виде рамки
корутина

корутина

обновление координат

чтение координат

draw_frame

draw_frame

draw_frame

#4. Прервать полёт мусора

obstacles

глобальная переменная

список препятствий задетых выстрелами

глобальная переменная
список всех препятствий

выстрел
попал в препятствие

фрагмент мусора
уничтожен

obstacles_in_last_collisions

fly_garbage

проверяет было ли попадание

корутина

fire

проверяет было ли столкновение

корутина

сообщаем о столкновении с препятсвием

список новых
столкновений

координаты
препятствий

Попадание?
Нет

Попадание?
Нет

Попадание?
Нет

Есть
попадание!

Столкновение?
Нет

Столкновение?
Нет

Есть
столкновение!