Python grequests需要很长时间才能完成

时间:2013-07-19 09:56:08

标签: python python-requests

我正在尝试删除我在urlSet中的很多URL。以下代码大部分时间都有效。但有时需要很长时间才能完成。例如,我在urlSet中有2950。 stderr告诉我2900已经完成,但getUrlMapping没有完成。

def getUrlMapping(urlSet):
# get the url mapping
urlMapping = {}
#rs = (grequests.get(u) for u in urlSet)
rs = (grequests.head(u) for u in urlSet)
res = grequests.imap(rs, size = 100)
counter = 0
for x in res:
    counter += 1
    if counter % 50 == 0:
        sys.stderr.write('Doing %d url_mapping length %d \n' %(counter, len(urlMapping)))
    urlMapping[ getOriginalUrl(x) ]  =   getGoalUrl(x) 
return urlMapping

def getGoalUrl(resp):
url=''
try:
    url = resp.url
except:
    url = 'NULL'
return url

def getOriginalUrl(resp):
url=''
try:
    url = resp.history[0].url
except IndexError:
    url = resp.url
except:
    url = 'NULL'
return url

1 个答案:

答案 0 :(得分:0)

可能它不会帮助你,因为它已经过了很长时间但仍然......

我遇到了一些与请求有关的问题,类似于您所拥有的问题。对我来说问题是Requests需要花费很长时间来下载一些页面,但是使用任何其他软件(浏览器,curl,wget,python的urllib)一切都运行良好......

如果浪费了大量时间,我注意到服务器发送了一些无效的标头,例如,在一个“慢”页面中,Content-type: text/html之后它开始以{{1}的形式发送标头注意冒号前面的空格。这会以某种方式破坏用于通过请求解析HTTP标头的Python Header-name : header-value功能,因此未解析email.header标头。

长话短说:在要求解决问题的内容之前,手动将Transfer-encoding: chunked属性设置为响应对象的chunked。例如:

True

需要很长时间,但

response = requests.get('http://my-slow-url')
print(response.text)

工作得很好!