python-2.7 - 下载大量文件时python请求挂起

标签 python-2.7 urllib2 python-requests

我正在尝试使用 python-request 包从网络下载大量文件(如 10k+),每个文件大小从几千到最大的 100mb。

我的脚本可以正常运行 3000 个文件,但突然它会挂起。
我 ctrl-c 它并看到它卡在

    r = requests.get(url, headers=headers, stream=True)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 456, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 559, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/adapters.py", line 327, in send
    timeout=timeout
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 493, in urlopen
    body=body, headers=headers)
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 319, in _make_request
    httplib_response = conn.getresponse(buffering=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1045, in getresponse
    response.begin()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 409, in begin
    version, status, reason = self._read_status()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 365, in _read_status
    line = self.fp.readline(_MAXLINE + 1)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 476, in readline
    data = self._sock.recv(self._rbufsize)

这是我用来下载的python代码
basedir = os.path.dirname(filepath)
if not os.path.exists(basedir):
    os.makedirs(basedir)
r = requests.get(url, headers=headers, stream=True)
with open(filepath, 'w') as f:
    for chunk in r.iter_content(1024):
        if chunk:
            f.write(chunk)
            f.flush()

我不确定出了什么问题,如果有人有线索,请分享一些见解。
谢谢。

最佳答案

这不是@alfasin 在他们的评论中链接的问题的重复。根据您发布的(有限)回溯判断,请求本身正在挂起(第一行显示它正在执行 r = requests.get(url, headers=headers, stream=True) )。

您应该做的是设置超时并捕获请求超时时引发的异常。获得 URL 后,请在浏览器中或使用 curl 尝试它以确保它正确响应,否则将其从要请求的 URL 列表中删除。如果您发现行为不当的 URL,请用它更新您的问题。

关于python-2.7 - 下载大量文件时python请求挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196706/

相关文章:

python - 有没有办法在 Python 2 中访问分数的分母

python - 如何处理 urllib2 套接字超时?

python - 如何在python中转储http请求

python - pip 安装 urllib2 #失败

python - 如何从文件名中获取数字?

python-2.7 - 在 Azure WebJobs 中使用 Python 包显示错误 - ImportError : DLL load failed

python - 在 Python 中将 click.progressbar 与多处理一起使用

python - 绘图时多重处理不起作用

python - 未找到 '%s'“% url 的连接适配器

仅当脚本在办公室的 cronjob 上运行时,Python 才请求/urllib3 NewConnectionError