Add solution for 6.5 section

This commit is contained in:
pro100ton 2024-11-14 23:04:19 +03:00
parent ab12d7efc0
commit 16b8ef873c

51
6_tasks/6_5_10_reports.py Normal file
View file

@ -0,0 +1,51 @@
import asyncio
reports = [
{"name": "Алексей Иванов", "report": "Отчет о прибылях и убытках", "load_time": 5},
{
"name": "Мария Петрова",
"report": "Прогнозирование движения денежных средств",
"load_time": 4,
},
{"name": "Иван Смирнов", "report": "Оценка инвестиционных рисков", "load_time": 3},
{
"name": "Елена Кузнецова",
"report": "Обзор операционных расходов",
"load_time": 2,
},
{"name": "Дмитрий Орлов", "report": "Анализ доходности активов", "load_time": 10},
]
async def download_data(report):
stop_name = "Дмитрий Орлов"
report_name = report["report"]
name = report["name"]
cur_task = asyncio.current_task()
if name == stop_name:
# asyncio.create_task(cancel_task(cur_task))
await cancel_task(cur_task)
print(
f"Загрузка отчета Анализ доходности активов для пользователя Дмитрий Орлов остановлена. Введите новые данные"
)
await asyncio.sleep(report["load_time"])
print(f"Отчет: {report_name} для пользователя {name} готов")
async def cancel_task(task):
task.cancel()
async def main():
tasks = [
asyncio.create_task(download_data(report=rep_entry), name=rep_entry["name"])
for rep_entry in reports
]
# try:
# await asyncio.wait(tasks)
# except asyncio.CancelledError:
# pass
await asyncio.wait(tasks)
asyncio.run(main())