我有一段代码可以查询返回大型json对象的服务器(elasticsearch,BTW), 阅读结果需要花费大量时间。解析json对象非常快。
tic = time.time()
req_resp = urllib2.urlopen(req, timeout = 60)
toc=time.time()
a = toc-tic
tic = time.time()
json_str = req_resp.read()
toc=time.time()
b = toc-tic
tic = time.time()
resp = json.loads(json_str)
toc=time.time()
c = toc-tic
print 'Fetch %.1f Process %.1f, load Json %.1f' %(a,b,c)
输出:
Fetch 0.5 Process 3.5, load Json 0.0
这似乎很奇怪,这需要花费很多时间,而加载json的速度很快。我究竟做错了什么?任何方式更快地做到这一点?
仅供参考,这是对elasticsearch中1000个文档的查询,返回几个字长的字符串字段。
我正在使用python 2.7
答案 0 :(得分:1)
socket
模块依赖于用{+ C ++编写的_socket
(我认为?)。据推测,在C ++和Python之间传输大量数据的开销很大。 .read()
我还得到一个奇怪的大开销,你没有用大数据集来尝试它,所以它不比获取时间大。我不确定除了切换到另一种语言之外你还能做些什么。如果我发现其他任何事情,我会做更多测试并回复你。