2012-08-05 6 views
4

이 지속적으로 증가 메모리 사용을 일으키는 원인이되는 스크립트의 버전을 박탈, 나는 2 분 지난 6백메가바이트 가서 본 적이있다 :grequests로 "메모리 누수"가 발생 했습니까?

import requests 
import grequests 

lines = (grequests.get(l.strip(), timeout=15) for l in open('links.txt') if len(l.strip())) 

for r in grequests.imap(lines, size=20): 
    if r.ok: 
     print r.url 

들은 links.txt이 많은 URL을 포함하는 파일입니다, 문제는 내가 수집 한 여러 개의 큰 그룹의 URL에서 발생합니다. 그것은 응답 객체가 deferenced되지 않을 수있는 것처럼 보입니다.

In [2]: gevent.version_info 
Out[2]: (1, 0, 0, 'beta', 3) 

In [5]: requests.__version__ 
Out[5]: '0.13.5' 

grequests 내가 찾을 수있는 버전 번호를 가지고 있지 않습니다

I 업데이트 gevent, 요청 및 grequests 오늘, 여기에 자신의 버전입니다.

미리 답변 해 주셔서 감사합니다.

+0

링크 목록의 끝까지 스크립트를 실행하면 어떻게됩니까? 어떤 종류의 오류가 발생합니까? – raben

+0

다른 문제를 해결했지만 동일한 문제가 발생했습니다. 응답 개체는 파일 핸들을 열어두고 리소스 소모가 발생합니다. ** 요청 ** 또는 ** grequests ** 문제인지 확실하지 않습니다. 그러나 요청의 저자가 grequests를 표준 모듈의 일부로 포함하지 않는 이유를 알 수 있다고 생각합니다. – synthesizerpatel

답변

0

내 관점에서 볼 때, 동시에 모든 링크를 열려고했기 때문에 발생했습니다. 이 같은 시도 :

links = set(links) 
while links: 
    calls = (grequests.get(links.pop()) for x in range(200)) 
    for r in calls: 
     ...rest of your code 

이 코드는 테스트되지 않습니다 당신은 더 좋은 soluution을 발견 할 것이다, 이것은 당신이 simly 같은 시간에 너무 많은 링크를 열려고 증명해야하며, 그 메모리가 소모됩니다.

0

이 답변은 단지 별칭 일 뿐이므로 link이 필요한 사람들을위한 링크입니다.

스크립트에서 380k 요청을하는 동안 메모리 사용량을 줄이기 위해 imap 함수와 requests.Session을 사용합니다.

관련 문제