import asyncio import time NETWORK_SPEED = 8 files = { "file1.mp4": 32, "image2.png": 24, "audio3.mp3": 16, "document4.pdf": 8, "archive5.zip": 40, "video6.mkv": 48, "presentation7.pptx": 12, "ebook8.pdf": 20, "music9.mp3": 5, "photo10.jpg": 7, "script11.py": 3, "database12.db": 36, "archive13.rar": 15, "document14.docx": 10, "spreadsheet15.xls": 25, "image16.gif": 2, "audioBook17.mp3": 60, "tutorial18.mp4": 45, "code19.zip": 22, "profile20.jpg": 9, } async def download_file(filename: str, size: int): download_time = size / NETWORK_SPEED print( f"Начинается загрузка файла: {filename}, его размер {size} мб, время загрузки " f"составит {download_time} сек" ) await asyncio.sleep(download_time) print(f"Загрузка завершена: {filename}") async def monitor_tasks(tasks): await asyncio.sleep(0.2) while len(tasks) > 0: done, tasks = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED) for task in tasks: print(f"Задача {task.get_name()}: в процессе, Статус задачи {task.done()}") for task in done: print(f"Задача {task.get_name()}: завершена, Статус задачи {task.done()}") await asyncio.sleep(1) async def main(): tasks = [ asyncio.create_task(download_file(filename, file_size), name=filename) for filename, file_size in files.items() ] await monitor_tasks(tasks) print("Все файлы успешно загружены") asyncio.run(main())