2013-06-09 4 views
0

큰 json 개체 (elasticsearch, BTW)를 반환하는 서버를 쿼리하는 코드 조각이 있습니다. 결과를 읽는 데 많은 시간이 걸립니다. json 객체를 파싱하는 것은 매우 빠릅니다.파이썬에서 URL 응답 읽기 속도 향상

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을로드하는 것은 빠르고 동안이, 너무 많은 시간을 소요 이상한 것 같다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 이것을 더 빨리 할 수있는 방법은 없습니까?

FYI 이것은 elasticsearch에있는 1000 개의 문서에 대한 쿼리로 여러 단어 길이의 몇 개의 문자열 필드를 반환합니다.

나는 socket 모듈은 C++로 작성 _socket에 의존 파이썬 2.7

+2

전혀 이상하지 않습니다. 그것은 네트워크 (및 서버 처리)가 병목 현상임을 보여 주며 이는 예상됩니다. – korylprince

+0

왜 탄력성 검색 데이터베이스에 직접 문의하지 않습니까? 탄성 검색에 익숙하지 않지만 HTTP 서버를 통해 실행되는 것은 의심 스럽습니다. – nacholibre

+0

이 쿼리는 한 번 또는 여러 번만 실행합니까? – Glaslos

답변

1

사용하고 있습니다 (I 생각을?). 아마도 C++과 Python 사이에 많은 양의 데이터를 전송하는 오버 헤드가있을 것입니다. 또한 이상한 큰 오버 헤드가 나타납니다 .read() 그 거대한 데이터 세트로 시도하지 않았기 때문에 가져 오는 시간보다 크지 않았습니다. 다른 언어로 전환하는 것 외에는 할 수있는 일이 있는지 확신 할 수 없습니다. 나는 더 많은 테스트를하고 다른 것을 찾으면 다시 연락 할 것입니다.

+0

감사합니다. – eran