如何使用urllib2打开“无限”jpg?

2024-10-01 15:32:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用urllib2open下载一些网页。不幸的是,一个页面是一个无限流(一组实时视频帧),urllib2不会超时,因为open调用成功,而“read”调用永远挂起。示例代码:

res = opener.open(encoded, timeout=timeout)
log('opened', url)
contents = res.read()
log('never get here')

有没有关于避免/终止这些联系的提示?在


Tags: 代码log网页示例read视频timeoutres
3条回答

这听起来像是发电机的工作!在

假设你有一个infinate文本文件。。。让我们称之为测试.txt现在open('test.txt').read()将挂起机器并最终崩溃,那么为什么不在生成器中的这个内隐流中逐行地让渡呢

def yield_line(file):
    with open(file) as inp:
        for line in inp:
            yield line

现在,当初始化的yield_line变成iterable对象时,这就合法了

^{pr2}$

现在考虑到url可以以与文件相同的方式操作,您只需在url中逐行生成

def yield_url(url):
    with urllib.urlopen(url) as inp:
        for line in inp:
            yield line

编辑: 超时示例

out = open('out.txt')
for count, line in enumerate(yield_line('test.txt')):
    if count == 444: #timeout value :D
        break
    out.write(line.replace('1','2'))

使用Jacob提到的生成器方法,我集成了一个“kill switch”。在

startime = datetime.now()
res = opener.open(url, timeout=timeout)
contents = ''
for item in res:
  contents += item
  if (datetime.now() - starttime).seconds > timeout:
    raise IOError('timeout')

您应该检查标头以检测它是否是多部分的,然后删除或读取内容。在

相关问题 更多 >

    热门问题