51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
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())
|