문제

나서 작동하는 파이썬 라이브러리와의 인터페이스 웹 서비스 API 를 사용합니다.다음과 같은 많은 웹 서비스 전에는 이 하나의 요청은 속도를 제한하의 요청이 있습니다.고 싶을 제공하는 선택적인 매개변수 limit, 를 클래스의 인스턴스화하는 제공한 경우,개최 보내는 요청을 때까지 번호의 지정된 초 전달합니다.

내가 이해하는 일반적인 시나리오는 다음과 같다:클래스의 인스턴스를 요청을 통한 방법입니다.는 방법이 방출하는 몇 가지 신호를 설정하는 잠금 변수이 어딘가에,시작 카운트다운 타이머의 수를 초에 limit.(모든 가능성에 잠금을 카운트다운 타이머 자체.) 는 경우 다른 요청은 이 기간 내에,그것은 대기될 때까지 카운트다운 타이머 제로에 도달하고 잠금을 해제;이 시점에서,가장 오래된 요청에서 큐로 전송,그리고 카운트다운 타이머가 리셋 및 잠금은 다시 관여됩니다.

이 경우 위한 스레딩?가 다른 방법을 보지 못하고?

해야한 카운트다운 타이머 및 잠금 것 인스턴스의 변수,또는 한다 그들이 속한 클래스,이러한 모든 클래스의 인스턴스가 요청을 보유?

또한,이것은 일반적으로는 나쁜 아이디어를 제공하는 속도 제한 기능을 내에는 도서관?나는 이유 때문에 기본적으로 카운트다운로 초,라이브러리는 여전히 개발자가 라이브러리를 사용할 수 있습니다 제 자신의 속도 제한 계획이다.주어진 모든 개발자는 서비스를 사용하는 것이 필요하게 제한 요청을 어쨌든,그러나 나는 그는 것이 편리한 라이브러리를 제공하는 것을 의미의 평가-제한하고 있다.

에 관계없이를 배치하는 속도 제한 방식 라이브러리에 있는지,나는 원하는 응용 프로그램을 작성 라이브러리를 사용하여 사용,그래서 제안 기술이 편리합니다.

많은 감사에 대한 제안!

Chris

도움이 되었습니까?

해결책

이 더 좋으로 큐 및 dispatcher.

분할 당신의 처리에 두 가지 측면으로: dispatch.이러한할 수 있는 별도의 스레드(또는 개별 프로세스의 경우 더 쉽).

측면을 만들고 enqueues 요청에 어떤 평가 그들에게 행복합니다.

Dispatch 측면이 나온 것입니다.

  1. 요청을 얻기 시작 시간 s.

  2. 큐를 분리,요청에서 요청을 처리를 통해 원격 서비스입니다.

  3. 현재 시간 t.면 - (t - s)초입니다.

하려면 실행 측에 직접 연결되어 있는 원격 서비스,당신이 할 수 있는,그리고 바이패스 속도 제한하고 있다.이것은 좋은 위한 내부 테스트로는 모의 버전의 원격 서비스입니다.

어려운 부분에 대해 이것은 일부를 만드는 표현에 대한 각 요청할 수 있는 인큐.이후 파이썬 을 처리하는 거의 아무것도,당신이 할 필요가 없다.

를 사용하는 경우 다이 처리해야 할 것이다, 피클 귀하의 개체를 넣으로 파이프입니다.

다른 팁

큐잉이 될 수 있는 지나치게 복잡합니다.간단한 솔루션을 제공하는 것입 등의 변수간의 서비스가 마지막으로 호출됩니다.할 때마다 서비스가 불(!1),이션과 함께하는 delay - Now + lastcalltime. delay 동일해야를 허용 가능한 최소 사이의 시간을 요청합니다.는 경우 이 번호는 긍정적이,수면 위해 오래 전에 전화를 걸어(!2).단점/이 방법은 그 취급 웹 요청을 서비스로는 동기입니다.의 장점은 그것은 터무니없이 간단하고 쉽게 구현할 수 있습니다.

  • (!1):일어나야 옳은 응답을 받은 후 서비스에서,내부는 래퍼(아마의 맨 아래에서 wrapper).
  • (!2):때 일어나야 하는 python 래퍼는 웹 서비스라고,상단에서 래퍼입니다.

S. 롯의 솔루션은 더 우아하고,물론입니다.

귀하의 속도 제한 방식해야에 의해 크게 영향을 호출하는 규칙의 기본 코드(syncronous 또는 비동기),뿐만 아니라 어떤 범위(쓰레드,프로세스,기계,클러스터?) 이는 속도 제한을 운영할 것입니다.

는 것이 좋을 유지하는 모든 변수에는 인스턴스,그래서 당신은 쉽게 구현할 수 있습니다 여러 기간/환율의 제어합니다.

마지막으로,그것은 소리처럼 당신이 원하는 미들웨어 구성 요소입니다.은 이해할 수 없는 응용 프로그램을 소개하고 스레드에 당신의 자신입니다.다단/잠는 경우는 동기를 사용하여 비동기 파견 framework 는 경우 호출되는 것에 의해 그들 중 하나입니다.

당신의 라이브러리 설계하는 동기식,그때 나는 떠나는 것이 좋습니다 나이 제한 적용(지만 당신을 추적 할 수 있 요금이 적어도 도움을 호출자는 방법을 결정을 존중한 제한).

내가 사용하는 트위스트 인터페이스와 모든 요즘입니다.그것은 쉽게 하는 유형의 것은 필요에 의해 모델을 구분하는 요청을 제출서 응답 처리가 있습니다.원하지 않는 경우에 당신의 API 를 사용자가 사용하는 꼬이는,당신은 적어도 더 나을 것을 이해하기 위한 API 를 지연 실행합니다.

예를 들어,트위터 인터페이스는 오히려 불의 번호를 통해 요청을 대신하여 xmpp 사용자.나지 않는 속도 제한을 하지만,나는이 해야 할 일을 방지하는 모든 요청이 같은 시간에 일어났습니다.

바퀴를 재발견하지 마십시오,그것을 위해 호출됩니다.체크인 멋진 라이브러리 ratelimit.완벽하려는 경우에는 속도 제한 귀하의 전화에 대한 rest api 를 사용하여 어떤 이유에서 얻을 당신의 생활에.

그래서 나는 가정과 같은 간단한 시간을 가져오기 시간입니다.sleep(2) 를 위해 일하지 않을 것이 기다리고 2 초 사이를 요청

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top