gpt4 book ai didi

python - 加快 urllib.urlretrieve

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:45 25 4
gpt4 key购买 nike

我正在从网上下载图片,结果我需要下载很多图片。我正在使用以下代码片段的一个版本(实际上循环遍历我打算下载的链接并下载图片:

import urllib
urllib.urlretrieve(link, filename)

我每 15 分钟下载大约 1000 张图片,根据我需要下载的图片数量来看,这非常慢。

为了提高效率,我每 5 秒设置一次超时(仍然有很多下载会持续更长时间):

import socket
socket.setdefaulttimeout(5)

除了在计算机集群上运行作业并行下载,有没有办法让图片下载更快/更高效?

最佳答案

我上面的代码非常幼稚,因为我没有利用多线程。显然需要响应 url 请求,但没有理由在代理服务器响应时计算机不能发出进一步的请求。

做以下调整,你可以将效率提高 10 倍——还有进一步提高效率的方法,如 scrapy 等包。

要添加多线程,使用 multiprocessing 包执行如下操作:

1) 将获取的url封装在一个函数中:

import import urllib.request

def geturl(link,i):
try:
urllib.request.urlretrieve(link, str(i)+".jpg")
except:
pass

2) 然后为下载的图片创建一个包含所有 url 和名称的集合:

urls = [url1,url2,url3,urln]
names = [i for i in range(0,len(urls))]

3) 从 multiprocessing 包中导入 Pool 类并使用此类创建一个对象(显然,在实际程序中,您会在代码的第一行中包含所有导入):

from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(100)

然后使用 pool.starmap() 方法并传递函数和函数的参数。

results = pool.starmap(geturl, zip(links, d))

注意:pool.starmap() 仅适用于 Python 3

关于python - 加快 urllib.urlretrieve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40166757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com