Вопрос проверяет понимание различий между синхронными функциями и корутинами, а также знание инструментов introspection в Python.
Определить, является ли функция корутиной, можно с помощью inspect.iscoroutinefunction() или asyncio.iscoroutinefunction(). Такие функции объявляются с помощью async def. Обычные функции объявляются через def и выполняются синхронно. Проверка полезна при написании универсального кода.
Корутиной в Python считается функция, объявленная с использованием async def, которая возвращает coroutine object и выполняется через await.
Для этого используется модуль inspect.
Пример:
import inspect
async def coro():
pass
def normal():
pass
inspect.iscoroutinefunction(coro) # True
inspect.iscoroutinefunction(normal) # False
Также можно проверить уже созданный объект:
inspect.iscoroutine(obj)
Проверка полезна:
в фреймворках
в middleware
в универсальных декораторах
Пример сценария:
if inspect.iscoroutinefunction(func):
await func()
else:
func()
Определение корутины выполняется через inspect или asyncio. Это стандартный способ адаптировать код к синхронным и асинхронным функциям.