Sobes.tech
Назад к вопросам
Junior — Middle
61

Каким образом реализовать декоратор в Python, который может оборачивать асинхронные функции?

Компании, где спрашивали
Магнит Тех

Ответ от нейросети

sobes.tech AI

Чтобы создать декоратор в Python, который может оборачивать асинхронные функции, нужно определить асинхронную функцию внутри декоратора и использовать await для вызова исходной функции. Вот пример такого декоратора:

import functools

def async_decorator(func):
    @functools.wraps(func)
    async def wrapper(*args, **kwargs):
        print("До вызова функции")
        result = await func(*args, **kwargs)
        print("После вызова функции")
        return result
    return wrapper

# Пример использования
@async_decorator
async def async_func(x):
    await asyncio.sleep(1)
    return x * 2

# Вызов из асинхронного контекста
import asyncio

async def main():
    result = await async_func(10)
    print(f"Результат: {result}")

asyncio.run(main())

Такой декоратор корректно работает с асинхронными функциями, позволяя выполнять дополнительные действия до и после вызова исходной функции.