requests.get()(Python,requests模块)是否暂停脚本直到响应到达?

requests.get()(Python,requests模块)是否暂停脚本直到响应到达?,python,python-requests,Python,Python Requests,这个问题是关于Python的请求模块的 我在使用requests.get()时遇到了一个问题,我超出了我正在联系的服务器允许的请求速率限制。我在每次请求后都将time.sleep()设置为更大一个数量级的值。代码如下所示: for url in url_list: success = False response = requests.get(url) while not success:

这个问题是关于Python的请求模块的

我在使用requests.get()时遇到了一个问题,我超出了我正在联系的服务器允许的请求速率限制。我在每次请求后都将time.sleep()设置为更大一个数量级的值。代码如下所示:

        for url in url_list:
            success = False
            response = requests.get(url) 
            while not success:
                time.sleep(1/250)
                if str(response) == "<Response [200]>":
                    time.sleep(1/250) # Wait Xs between API call      
                    do_stuff(response.text)
                    success = True

                else:
                    print(response)
                    print(response.headers)
                    time.sleep(3)
                    response = requests.get(url)
url\u列表中的url的
:
成功=错误
response=requests.get(url)
虽然没有成功:
时间。睡眠(1/250)
如果str(响应)==“”:
time.sleep(1/250)#在API调用之间等待Xs
做些什么(response.text)
成功=正确
其他:
打印(答复)
打印(响应.标题)
时间。睡眠(3)
response=requests.get(url)

我一直在提高我的速率,每秒300个请求,而我最多每秒只能发送125个请求。在响应到达之前,请求不会暂停脚本吗?我不确定。我如何确保发送的请求不会超过我的速率?

requests.get函数是一个阻塞调用。它将等待响应到达,然后执行程序的其余部分。如果您想做其他事情,您可能需要查看或模块。

如果您正在做的是python2
time.sleep(0)
。试试
1./250
。你确定唯一的限制是300/秒(也就是说,不是每天的限制),你确定失败的请求是由于达到了该速率限制吗?BrenBarn这正是我想要确定的。我唯一能达到的另一个限制是一个变量“服务器有太多的请求,所以去你的”限制。但如果发生错误,我会等待3秒,这也应该是足够的时间。所以我不确定requests.get()是否会在收到响应之前暂停脚本,或者是什么。有趣的是,我使用的是python3,还有Windows。当时我在某个地方读到过。睡眠(0)等待10-13毫秒,这应该远远超过我的极限。不过,我回家后会尝试1./250。你没有重复这个请求。进入你的循环。因此,如果第一次失败,您的程序将永远循环(在循环之间休眠),我很抱歉,在复制/粘贴代码时,该部分代码不知何故未被选中。修复了它,谢谢。我将接受这个答案,因为它包含了我正在寻找的答案的一部分,而答案的另一部分是由API主机回答的。事实证明,我并没有遇到我的速率限制,而是设置了一些可变速率限制,以防止服务器泛滥,正如问题的一条评论中所建议的那样。