Что такое 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