Асинхронное программирование позволяет выполнять множество задач параллельно, повышая эффективность и производительность программ. В Python для асинхронного программирования используется модуль asyncio, который предоставляет мощные инструменты для создания асинхронных приложений.
Теоретическая часть
Модуль asyncio
Asyncio — это библиотека для написания асинхронного кода с использованием синтаксиса async/await. Она используется для создания асинхронных версий IO-операций, обеспечивая неблокирующее выполнение кода.
Async/await
Ключевые слова async и await используются для определения асинхронных функций и ожидания их выполнения. Async определяет функцию как асинхронную, а await используется для приостановки выполнения функции до завершения другой асинхронной операции.
Примеры кода
# Пример асинхронной функции
import asyncio
async def hello_world():
print("Hello")
await asyncio.sleep(1)
print("World")
asyncio.run(hello_world())
Практические задания
1. Создайте асинхронную функцию для скачивания веб-страницы и извлечения определенной информации из нее.
2. Разработайте асинхронный сценарий, который одновременно отправляет несколько HTTP-запросов к различным API и обрабатывает их ответы как только они становятся доступны.
Решение задания
# Пример асинхронной функции для скачивания веб-страницы
import asyncio
import aiohttp
async def fetch_page(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
# Пример асинхронного сценария для HTTP-запросов
async def fetch_all(urls):
tasks = []
async with aiohttp.ClientSession() as session:
for url in urls:
task = asyncio.create_task(session.get(url))
tasks.append(task)
responses = await asyncio.gather(*tasks)
return [await response.text() for response in responses]
urls = ['https://example.com', 'https://example.org']
asyncio.run(fetch_all(urls))