Что такое async
Ключевое слово async
идет до def
, чтобы показать, что метод является асинхронным. Ключевое слово await
показывает, что вы ожидаете завершения сопрограммы.
import asyncio
import aiohttp
urls = ['http://www.google.com', 'http://www.yandex.ru', 'http://www.python.org']
async def call_url(url):
print('Starting {}'.format(url))
response = await aiohttp.get(url)
data = await response.text()
print('{}: {} bytes: {}'.format(url, len(data), data))
return data
futures = [call_url(url) for url in urls]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(futures))
Программа состоит из метода async. Во время выполнения он возвращает сопрограмму, которая затем находится в ожидании.
async/await
нужен для того, чтобы не блокировать поток выполнения на время ожидания какого-нибудь асинхронного события. Конструкция async/await
превращает по сути процедуру в корутину (сопрограмму): она прекращает своё выполнение на время await
, дожидается асинхронного события, и возобновляет работу.
В не-async-варианте ожидание получается блокирующим, или нужно вручную делать трюки: запускать операцию и подписываться на её окончание. Async делает код более простым, линейным.
Oct. 12, 2023, Источник
async - объявляет, что эта функция является корутиной.
await - это специальный синтаксис, который передает управление обратно в event loop.
Oct. 12, 2023, Источник
"async" - используется для определения асинхронных функций и контекста выполнения. Оно связано с асинхронным программированием, которое позволяет эффективно использовать асинхронные операции ввода-вывода (I/O), такие как сетевые запросы, базы данных и другие блокирующие операции, без блокировки основного потока выполнения.
Основные концепции:
1. Асинхронные функции (async functions): Функции определяются с помощью ключевого слова "async". Они могут содержать асинхронные операции и выражения, которые могут быть приостановлены и продолжены позже, когда завершится операция ввода-вывода. Для объявления этой функции используется синтаксис:
async def my_async_function():
# Асинхронные операции
2. Контекст выполнения асинхронного кода (async context): Код выполняется в асинхронном контексте, который создается с помощью ключевого слова "asyncio". Контекст выполнения обеспечивает механизм управления выполнением асинхронного кода и планирования операций. Для входа в этот контекст используется синтаксис:
import asyncio
async def main():
# Асинхронный код
asyncio.run(main())
3. Ожидание асинхронных операций (await): В этих функциях можно использовать ключевое слово "await" для ожидания завершения асинхронных операций ввода-вывода. Оператор "await" блокирует выполнение данной функции до тех пор, пока эта операция не будет завершена. Например:
async def fetch_data(url):
# Ожидание завершения сетевого запроса
response = await aiohttp.get(url)
return response
Асинхронное программирование позволяет эффективно использовать ресурсы процессора и управлять множеством асинхронных операций ввода-вывода без блокировки основного потока выполнения. Это особенно полезно в веб-приложениях и сервисах, которые часто выполняют большое количество асинхронных операций, таких как сетевые запросы и базы данных.
Feb. 18, 2024, easyoffer