簡體   English   中英

將請求速率限制為CGI腳本中的API

[英]Limit the rate of requests to an API in a CGI script

我正在編寫的腳本有時會向API發出請求,而該API則要求每秒請求的最大數量限制為1。

將我對API的請求每秒限制為1的最直接的方法是什么?

是否會在每次發出請求時將當前時間存儲在文件中?

您可以為CGI調用使用一個單獨的線程,並使用一個排隊機制來循環每次調用時進入睡眠狀態。

15.3。 時間

time.sleep(secs)暫停執行指定的秒數。 該參數可以是浮點數,以指示更精確的睡眠時間。 實際的暫停時間可能少於請求的暫停時間,因為任何捕獲到的信號都會在執行該信號的捕獲例程后終止sleep()。 而且,由於系統中其他活動的調度,暫停時間可能比請求的時間長任意數量。

可以在希望進行速率限制的函數上使用速率限制python裝飾器 ,例如Greg Burek的代碼:

import time

def RateLimited(maxPerSecond):
    minInterval = 1.0 / float(maxPerSecond)
    def decorate(func):
        lastTimeCalled = [0.0]
        def rateLimitedFunction(*args,**kargs):
            elapsed = time.clock() - lastTimeCalled[0]
            leftToWait = minInterval - elapsed
            if leftToWait>0:
                time.sleep(leftToWait)
            ret = func(*args,**kargs)
            lastTimeCalled[0] = time.clock()
            return ret
        return rateLimitedFunction
    return decorate

@RateLimited(2)  # 2 per second at most
def PrintNumber(num):
    print num

if __name__ == "__main__":
    print "This should print 1,2,3... at about 2 per second."
    for i in range(1,100):
        PrintNumber(i)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM