/
mksmakarov
/
learn-python
Обзор
Документация
Войти
/
mksmakarov
/
learn-python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
asynchronous-programming/code/aiohttp_example.py
59 строк
3 KB
noir3cnt
[ADD] asyncio and aiohttp examples
07 июн 2026, 15:28
07 июн 2026, 15:28
fb78c26
Код
Авторство
О чём код?
import asyncio import time import aiohttp async def fetch_page(session, url): """ Корутина, которая получает объект сессии и URL, выполняет GET-запрос и печатает размер полученного контента. """ print(f"Отправка запроса на {url}") # 'async with' используется для корректного управления ресурсами. # Эта строка отправляет запрос и ожидает ответа от сервера. async with session.get(url) as response: # Ожидаем, пока всё тело ответа будет загружено в память. html = await response.text() print(f"Получен ответ от {url} | Размер: {len(html)} символов") return len(html) # Возвращаем длину содержимого # 2. Главная корутина, управляющая всем процессом async def main(): urls = [ "https://python.org", "https://github.com", "https://stackoverflow.com", "https://pypi.org", ] # Создаем одну сессию для всех запросов. # Это позволяет переиспользовать TCP-соединения и значительно ускоряет работу. async with aiohttp.ClientSession() as session: # Создаем список задач (Task) для каждого URL. tasks = [] for url in urls: # Создаем задачу из корутины и добавляем ее в список. # Задачи запускаются сразу после создания. task = asyncio.create_task(fetch_page(session, url)) tasks.append(task) # Запускаем все задачи конкурентно и ждем их завершения. # gather соберет результаты в том же порядке, в котором были переданы задачи. results = await asyncio.gather(*tasks) total_size = sum(results) print("\n--- Загрузка завершена ---") print(f"Скачано всего: {total_size} символов") # 3. Точка входа в программу if __name__ == "__main__": start_time = time.time() # Запускаем главную корутину внутри цикла событий. asyncio.run(main()) duration = time.time() - start_time print(f"Время выполнения: {duration:.2f} секунд")