From 52d9cd53cb25f8499cc89c37363d456f97f31d08 Mon Sep 17 00:00:00 2001 From: pro100ton Date: Thu, 21 Nov 2024 22:22:48 +0300 Subject: [PATCH] Add solutions for 6.13 shield section --- 6_tasks/6_13_04_shield.py | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 6_tasks/6_13_04_shield.py diff --git a/6_tasks/6_13_04_shield.py b/6_tasks/6_13_04_shield.py new file mode 100644 index 0000000..32054ea --- /dev/null +++ b/6_tasks/6_13_04_shield.py @@ -0,0 +1,51 @@ +# Решение не все, так как детали задачи скрыты +import asyncio + +# Время доставки до разных городов: +delivery_times = { + "Москва": 1, + "Санкт-Петербург": 3, + "Новосибирск": 7, + "Екатеринбург": 5, + "Нижний Новгород": 4, + "Челябинск": 6, + "Омск": 7, + "Красноярск": 8, + "Владивосток": 9, + "Хабаровск": 9, +} + +# Заказы: +# orders = [(подарок, город, пометка), ...] + +# Время до нового года: +# days_left = + + +# Тут пишите ваш код: +async def deliver(order): + # Напишите корутину deliver(), которая будет после указанного для данного города времени доставки выводить сообщение: + # order = (подарок, город, пометка) + await asyncio.sleep(delivery_times.get(order[1])) + print(f"Подарок {order[0]} успешно доставлен в г. {order[1]}") + + +async def main(): + tasks = [] + for order in orders: + # Get order note + note = order[2] + city_name = order[1] + present = order[0] + task = asyncio.create_task(deliver(order)) + if note == "важно": + tasks.append(asyncio.shield(task)) + else: + tasks.append(task) + done, pending = await asyncio.wait(tasks, timeout=days_left) + for p_task in pending: + p_task.cancel() + await asyncio.sleep(15) + + +asyncio.run(main())