當我使用使10個請求
requests.get()
一次又一次地調用相同的服務器,但我限制在每分鐘30名的請求Python的睡眠。當我提出30個請求時,如何讓程序進入睡眠狀態一分鐘。挑戰是
requests.get()
無處不在我的代碼中,我不能把它們放在一個循環中。
當我使用使10個請求
requests.get()
一次又一次地調用相同的服務器,但我限制在每分鐘30名的請求Python的睡眠。當我提出30個請求時,如何讓程序進入睡眠狀態一分鐘。挑戰是
requests.get()
無處不在我的代碼中,我不能把它們放在一個循環中。
您可以使用Adapter Pattern來包裝請求。像這樣的:
class RequestLimiter:
def __init__(self):
self.count = 0
def get(self, *args, **kwargs):
if self.count == 30:
time.sleep(60)
self.count = 0
return requests.get(*args, **kwargs)
else:
self.count += 1
requests.get(*args, **kwargs)
def main():
# If this is through your whole program,
# you might want to make this global- be careful with that!
r = RequestLimiter()
r.get(url, args)
根據您的要求,你可能想要改變一些。例如,在編碼時,無論您的get
成功或失敗,您的次數都會增加。這可能是也可能不是你想要的。如果您決定創建此類的全局實例,那麼您必須擔心併發訪問count
變量(如果您使用的是併發性)。
'time.sleep(60)'...... –