Python Glossary English

Python 3.5+inspectфункция

inspect.isawaitable()

корутины и генераторы

Проверяет, можно ли объект поставить после await: корутина, Future, Task, объект с __await__ или генератор с @types.coroutine.

Синтаксис

inspect.isawaitable(object) -> bool

Проверяют объект, а не функцию: isawaitable(asyncio.sleep) даёт False, а isawaitable(asyncio.sleep(0)) — True. Обычный генератор ждать нельзя, а тот же генератор из функции с @types.coroutine — можно; именно так isawaitable отличает их. Типичное применение — API, принимающий и обычную, и асинхронную функцию обратного вызова: result = cb(); if inspect.isawaitable(result): result = await result.

Примеры

import asyncio, inspect
def sync_cb():
    return 'sync'
async def async_cb():
    return 'async'
async def call(cb):
    result = cb()
    if inspect.isawaitable(result):
        result = await result
    return result
print(asyncio.run(call(sync_cb)), asyncio.run(call(async_cb)))  # → sync async
print(inspect.isawaitable(asyncio.sleep))  # → False — функция, а не объект
import inspect, types
def gen():
    yield
@types.coroutine
def gen_coro():
    yield
print(inspect.isawaitable(gen()), inspect.isawaitable(gen_coro()))  # → False True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности