Как сделать декоратор принимающий асинхронную функцию в Python
Python
Middle
Без компании
Как сделать декоратор принимающий асинхронную функцию в Python
Ответы
Для создания декоратора, работающего с асинхронными функциями, нужно использовать `async def` и `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_function():
print("Асинхронная функция выполняется")
return 42
```
Ключевые моменты:
- Декоратор должен возвращать асинхронную функцию (`async def`)
- Для вызова исходной функции используем `await`
- `functools.wraps` сохраняет метаданные оригинальной функции
- Декоратор может быть как синхронной, так и асинхронной функцией
Пример использования:
```
import asyncio
async def main():
result = await async_function()
print(result)
asyncio.run(main())
```