>

redis 에 기반한 속도 제한 파이썬 데코레이터 이 em>수업. 다음과 같이 사용할 수있는 표준 라이브러리에서만 사용할 수있는 유사한 데코레이터를 작성하려면 어떻게해야합니까?

def ratelimit(limit, every):
    # 
  • 답변 # 1

    threading.Semaphore 를 사용할 수 있습니다   threading.Timer 와 함께 한계를 초과하는 요청을 계산하고 차단  세마포어를 해제하는 기능을 예약합니다.

    from threading import Semaphore, Timer
    from functools import wraps
    def ratelimit(limit, every):
        def limitdecorator(fn):
            semaphore = Semaphore(limit)
            @wraps(fn)
            def wrapper(*args, **kwargs):
                semaphore.acquire()
                try:
                    return fn(*args, **kwargs)
                finally:                    # don't catch but ensure semaphore release
                    timer = Timer(every, semaphore.release)
                    timer.setDaemon(True)   # allows the timer to be canceled on exit
                    timer.start()
            return wrapper
        return limitdecorator
    
    

    이 아이디어를 확장하고 limit이라는 이름의 PyPI에 라이브러리를 게시했습니다.

  • 이전 php - 내 PDO 코드에 오류가 있거나 MySQL에서 무언가 수정해야합니까?
  • 다음 javascript - MongoDB에서 $where가있는 문서 수 계산