python3 根据远程图片链接,多线程保存图片到本地

1. 获取图片链接,将图片链接append 到 list 中

  图片链接有两种,

         第一种,有规律 : 只有图片名称不一样

urls = []
for i in range(5460):   # range(5460) 代表有多少张图片
    url = '****图片存放的网址*/static/img/coins/32x32/{}.png'.format(i + 1)
    urls.append(url)
get_coin_images(urls, 10)

        第二种,无规律  :是所有的图片路径,如果用下面的方式,获取图片的名称,就不能用splie() 函数,需要获取图片名的函数,或自定义图片名称,

 

2. 进行多线程图片下载保存到本地

import requests
import time
import threading
import queue

from celery_test1.settings import DOWN_LOAD_COIN_URL  # 这里是再settings.py 中设置的图片路径变量,根据实际情况确定


# 定义函数方法
def get_coin_images(urls=[], num=3):
    """
        多线程下载远程图片保存到本地,
    :param urls:  图片链接 list 这里就不做验证了,因为自己调用, 要作为公用还需要优化参数就执行程序
    :param num:   开启的线程数,默认3
    :return:
    """

    q = queue.Queue()
    for url in urls:
        q.put(url)
    start = time.time()
    def fetch_img_func(q):
        while True:
            try:
                url = q.get_nowait()  # 不阻塞的读取队列数据
                png = url.split('32x32/')  # 这里是我根据图片的链接进行的拆分,获取图片的名称,进行原名称保存
                print(png[1])  # 这里是获取的图片名称
                i = q.qsize()
            except Exception as e:
                print(e)
                break
            print("当前还有%s个任务" % i)  # 这里print 信息
            res = requests.get(url, stream=True)
            if res.status_code == 200:
                save_img_path =DOWN_LOAD_COIN_URL + png[1]  # settings.py 中设置的图片路径 + 拆分的原图片名称
                # 保存下载的图片
                with open(save_img_path, 'wb') as fs:
                    for chunk in res.iter_content(1024):
                        fs.write(chunk)

    threads = []
    for i in range(num):
        t = threading.Thread(target=fetch_img_func, args=(q, ), name="child_thread_%s" % i)
        threads.append(t)
    for t in threads:
        t.start()
    for t in threads:
        t.join()

    print(time.time()-start)   # 这里是结束时间 - 开始时间 获取的该程序的耗时

3 程序运行过程中的示例

4. 耗时,仅作参考,因为网络,硬件等问题不相同,

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值