Python 3.4+до 3.16Асинхронное программированиефункция
asyncio.iscoroutinefunction()
интроспекция
Deprecated: устаревшая проверка «функция объявлена через async def»; с 3.14 даёт DeprecationWarning, removal in 3.16. Замена — inspect.iscoroutinefunction().
Синтаксис
inspect.iscoroutinefunction(func) # вместо asyncio.iscoroutinefunction(func)
Функция жила в asyncio ради старых генераторных корутин @asyncio.coroutine (удалены в 3.11) и не попала в справочник модуля — её объявили устаревшей в 3.14. inspect.iscoroutinefunction делает то же и понимает functools.partial; для обычной функции, возвращающей awaitable, её помечают inspect.markcoroutinefunction (3.12+). Обе проверки смотрят на объявление, а не на поведение: def, возвращающая корутину, даст False.
Примеры
import inspect
async def fetch():
return 1
def wrapper():
return fetch()
print(inspect.iscoroutinefunction(fetch)) # → True
print(inspect.iscoroutinefunction(wrapper)) # → False — смотрит на объявление
import asyncio
import warnings
async def fetch():
return 1
with warnings.catch_warnings():
warnings.simplefilter('ignore', DeprecationWarning) # с 3.14 здесь DeprecationWarning
print(asyncio.iscoroutinefunction(fetch)) # → True
# Python 3.16+
import functools
import inspect
async def fetch(x):
return x
print(inspect.iscoroutinefunction(functools.partial(fetch, 1))) # → True — partial тоже
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности