python keep alive 响应对象

python keep alive response object

from urllib2 import urlopen

response = urlopen(url)
for line in response:
    do_some_job(line)
response.close()

我正在从 url 中获取一些数据,该数据非常大。 每一行都将花费很多时间来阅读(每行平均 40000000 个字符)并且函数 'do_some_job' 在 time.my 方面也很昂贵这里的问题是在执行第二次迭代时响应正在关闭并且异常是举起并展示

socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host

如果我通过尝试并重新打开新的响应对象来处理这个问题,我如何才能跳过第一行并从第二行开始迭代。

最直接的方法是为每一行重新打开 url,读取(并忽略)已处理的行:

lines_done = 0
while True:
    response = url open(url)
    lines_skipped = 0
    did_job = False
    for line in response:
        if lines_skipped == lines_done:
            do_some_job(line)
            did_job = True
            break
        lines_skipped += 1
    response.close()
    if did_job:
        lines_done += 1
    else:
        break

@ScottHunter 在您的解决方案中我们也正在阅读已经阅读的行,我们唯一要做的就是阅读行并在已经阅读的情况下跳过。

所以我实施的解决方案是 - 使用具有字符限制的 readline 一次读取有限的字符

from urllib2 import urlopen
response = urlopen(url)
while True:
    line = response.readline(4096)
    if not line:
        break
    do_some_job(line)
response.close()