Python在发出10个请求时休眠
我正在使用Python在发出10个请求时休眠,python,sleep,Python,Sleep,我正在使用 requests.get() 一次又一次地呼叫同一台服务器,但我每分钟只能接到30个请求。当我发出30个请求时,如何使程序睡眠一分钟。挑战是 requests.get() 在我的代码中到处都是,我不能把它们放在一个循环中 您可以使用来包装请求。大概是这样的: class RequestLimiter: def __init__(self): self.count = 0 def get(self, *args, **kwargs):
requests.get()
一次又一次地呼叫同一台服务器,但我每分钟只能接到30个请求。当我发出30个请求时,如何使程序睡眠一分钟。挑战是
requests.get()
在我的代码中到处都是,我不能把它们放在一个循环中 您可以使用来包装请求。大概是这样的:
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)
…虽然您的代码在睡眠前将请求数限制为30,但这与允许每分钟最多30次不同。我认为,要真正做到OP所需要的,需要对请求之间的间隔有一定的了解。@martineau,OP最初的问题是在每30次请求后如何睡眠一分钟。我把这段代码作为最简单的方法发布。不过,我确实同意,这不是限制请求的最有效的方式。如果我有时间的话,今晚我会尝试用你的时间间隔法发布另一个答案。我并不是说你的答案没有效率,只是它需要计算每分钟的请求数才能真正完成OP想要做的事情。此外,还可能需要检查是否提出了相同的请求,并相应地进行调整或重置。