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想要做的事情。此外,还可能需要检查是否提出了相同的请求,并相应地进行调整或重置。