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())