Add solutions for 6.13 shield section
This commit is contained in:
parent
8426560ba4
commit
52d9cd53cb
1 changed files with 51 additions and 0 deletions
51
6_tasks/6_13_04_shield.py
Normal file
51
6_tasks/6_13_04_shield.py
Normal file
|
@ -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())
|
Loading…
Reference in a new issue