Python的requests.post是否如此缓慢,还是我做错了什么?

6

我是一名新手Python编程者,被分配做一个简单的应用程序来进行API调用。虽然它能够正常工作,但我并不满意它的速度。我在慢速和快速互联网连接上都试过了,平均从1.3到2.4秒之间来完成API调用。我在5Mbps至80Mbps的互联网连接上测试了这个应用程序,两者都显示了类似的结果(差异约为0.5秒)。


 

时间看起来并不太糟糕,但是当我检查服务器时发现,请求处理时间只有0.2-0.5秒左右,也就是说,在请求过程中有1-2秒的时间丢失。


以下是我正在使用的代码:

import requests
import json
import time
import uuid
import requests.packages.urllib3

requests.packages.urllib3.disable_warnings() 

#get api call start time
startTime = time.time()

#make api call
r=requests.post(APIUrl, data=payload, headers=headers, verify=False)

#get api call finish time
endTime = time.time()

#calculate time taken
totalTimeTaken = str(float(round((endTime - startTime ),3)))

json_obj = r.json(strict=False)
print "Response: "+str(json_obj['response'])
print "Elapsed: "+str(r.elapsed)
print "Time Taken: "+totalTimeTaken

3
你是如何测量服务器时间的?你在这里使用 requests.post() 的方式没有问题,你等待的只是服务器和数据传输所需的时间。 - Martijn Pieters
2
“requests” 没问题。还有很多其他原因:你的电脑慢或服务器慢,或者负载太大... - ForceBru
2
@MartijnPieters, ForceBru: 我不同意。我对服务器和客户端都有完全的控制。使用Chrome对资源进行GET请求,我可以立即看到服务器响应。但使用requests,则需要等待4秒钟才能让服务器看到该请求,然后响应几乎立即。另外,将timeout参数设置为1秒后,可以进一步说明整个交易需要4.4秒,但请求没有超时。因此,除了数据检索之外,还有其他地方存在缓慢。FWIW,服务器响应时间<40ms。 - xobes
1
@xobes:抱歉,您与此问题有何关系?我从未在“请求”中看到过这样的延迟,这种延迟似乎是您的设置所特有的。Chrome是否设置了代理?名称服务器查找速度有多快?服务器上是否安装了可能会阻塞特定用户代理的任何内容? - Martijn Pieters
4
@akmalhakimi1991 谢谢,我终于找到问题所在了。也许这是 requests 库在 Windows 操作系统(Win10)上的 bug 吧?如果我像这样配置 URL:'http://localhost:port',那么 create_connection 函数要花费近 2000 毫秒才能建立连接。但是如果我像这样配置 URL:'http://127.0.0.1:port',那么只需要 4 毫秒就可以建立连接了。 - Liping Huang
显示剩余6条评论
1个回答

5

@Liping Huang的评论转换为答案,以便更多人看到。

将URL从localhost更改为127.0.0.1可以将开销减少近2秒钟,几乎可以忽略不计。


这意味着对于OP而言DNS查找很慢,与requests.post无关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接