python_asyncio_course/6_tasks/6_05_10_reports.py

51 lines
1.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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