Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python grequests需要很长时间才能完成_Python_Python Requests - Fatal编程技术网

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

Python grequests需要很长时间才能完成,python,python-requests,Python,Python Requests,我正在尝试取消对URL集中的许多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 urlS

我正在尝试取消对URL集中的许多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

也许这对你没有帮助,因为它已经过去了很长一段时间,但是

我在请求方面遇到了一些问题,与您遇到的问题类似。对我来说,问题是下载一些页面需要很长时间,但使用任何其他软件(浏览器、curl、wget、python的urllib),一切都很好

在浪费了很多时间之后,我注意到服务器发送了一些无效的标题,例如,在一个“慢速”页面中,在
内容类型:text/html
之后,它开始以
标题名称:标题值
的形式发送标题(注意冒号前的空格)。这在某种程度上破坏了Python用于按请求解析HTTP头的
email.header
功能,因此没有解析
Transfer-encoding:chunked

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

response = requests.get('http://my-slow-url')
print(response.text)
花了很长时间,但是

response = requests.get('http://my-slow-url')
response.raw.chunked = True
print(response.text)
工作得很好