From 16b8ef873c88fbeeea8edf2f790275d08132e78e Mon Sep 17 00:00:00 2001 From: pro100ton Date: Thu, 14 Nov 2024 23:04:19 +0300 Subject: [PATCH] Add solution for 6.5 section --- 6_tasks/6_5_10_reports.py | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 6_tasks/6_5_10_reports.py diff --git a/6_tasks/6_5_10_reports.py b/6_tasks/6_5_10_reports.py new file mode 100644 index 0000000..bbe9593 --- /dev/null +++ b/6_tasks/6_5_10_reports.py @@ -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())