Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 사용자에 대한 속도 제한 검사를 지원하는 데이터 구조를 정의하는 프로그램

<시간/>

만료 시간으로 구축할 수 있고 사용자 ID와 타임스탬프를 취하는 함수를 지원하는 데이터 구조를 개발한다고 가정합니다. 이것은 주어진 타임 스탬프에 주어진 user_id를 가진 사용자가 요청이 실패했는지 여부를 확인합니다. 사용자가 지정된 만료 시간 이전에 성공적으로 요청한 경우에만 실패합니다.

따라서 입력이 만료 =6과 같으면 개체 obj를 생성하고 obj.limit(0,10), obj.limit(0,16), obj.limit(0,17) 및 obj.limit( 1,20), 그러면 출력은 각각 False, False, True 및 False가 됩니다. 왜냐하면 사용자 0의 경우 처음에는 요청이 없었기 때문에 false이고, 시간 16에서는 마지막 요청 10보다 만료 시간 6보다 크지 않기 때문입니다. 그러나 17에서는 true이고 마지막 요청의 경우 사용자 1을 위한 것이므로 초기 요청은 false입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

생성자를 정의합니다. 만료됩니다

  • lastCall :=기본값이 -1인 사전 생성
  • 함수 limit()를 정의합니다. uid, 타임스탬프가 필요합니다.
  • 마지막 :=lastCall[uid]
  • 마지막이 -1 또는 (마지막 + 만료) <=타임스탬프와 같으면
    • lastCall[uid] :=타임스탬프
    • 거짓을 반환
  • 참 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

from collections import defaultdict
class RateLimit:
   def __init__(self, expire):
      self.expire = expire
      self.lastCall = defaultdict(lambda: -1)
   def limit(self, uid, timestamp):
      last = self.lastCall[uid]
      if last == -1 or last + self.expire <= timestamp:
         self.lastCall[uid] = timestamp
         return False
      return True

expire = 6
obj = RateLimit(expire)
print(obj.limit(0,10))
print(obj.limit(0,16))
print(obj.limit(0,17))
print(obj.limit(1,20))

입력

RateLimit(6)
obj.limit(0,10)
obj.limit(0,16)
obj.limit(0,17)
obj.limit(1,20)

출력

False
False
True
False