from urllib2 import urlopen
response = urlopen(url)
for line in response:
do_some_job(line)
response.close()
我从一个非常大的网址获取一些数据。 每一行都需要花费很多时间来阅读(每行平均40000000个字符),函数'do_some_job'在时间方面也很昂贵。我的问题是,在执行第二次迭代时,响应正在关闭,异常正在提升并显示< / p>
socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host
如果我通过尝试并重新打开新响应对象来处理此问题,我如何跳过第一行并开始从第二行迭代。
答案 0 :(得分:1)
@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()
答案 1 :(得分:0)
最直接的方法是重新打开每一行的网址,阅读(并忽略)已处理的网址:
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