Ограничение частоты вызова функции
Python
Middle
Яндекс
01.01.2025
Реализуйте декоратор `throttle(seconds: float)`, который не позволяет вызывать функцию чаще, чем 1 раз в `seconds` секунд.
При слишком частых вызовах функция просто не должна выполняться (можно возвращать `None`).
Ответы
Решение 1
```python
import time
import functools
from typing import Callable, Any
def throttle(seconds: float) -> Callable[[Callable[..., Any]], Callable[..., Any | None]]:
def decorator(func: Callable[..., Any]) -> Callable[..., Any | None]:
last_called = 0.0
@functools.wraps(func)
def wrapper(*args, **kwargs) -> Any | None:
nonlocal last_called
now = time.time()
if now - last_called >= seconds:
last_called = now
return func(*args, **kwargs)
return None
return wrapper
return decorator
```