python_asyncio_course/6_tasks/6_13_04_shield.py

51 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Решение не все, так как детали задачи скрыты
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())