同步下载图片和协程下载图片记录

同样下载600张图片保存到本地,测试同步下载和协程并发下载的速率

1、同步

import requests
import time


# 计算函数运行时间的装饰器
def run_time(func):
    def decorator(*args, **kwargs):
        start_time = time.time()
        ret = func(*args, **kwargs)
        end_time = time.time()
        spend_time = end_time - start_time
        print("======执行函数总用时间{}秒".format(spend_time))
        return ret
    return decorator


# 用普通方式下载图片
def image_url_list():
    url_list = [
        'http://tiebapic.baidu.com/forum/pic/item/a7d6277f9e2f07087e1e9379fe24b899a901f2b4.jpg',
        'http://tiebapic.baidu.com/forum/pic/item/21e93901213fb80ec7c1d8ae21d12f2eb93894b3.jpg',
        'http://tiebapic.baidu.com/forum/w%3D580/sign=2013511d414e9258a63486e6ac82d1d1/62a7d933c895d143847b5d5a64f082025aaf07bd.jpg',
        'http://tiebapic.baidu.com/forum/w%3D580/sign=3d72ad76af0e7bec23da03e91f2fb9fa/f100baa1cd11728b4363355bdffcc3cec3fd2c78.jpg',
        'http://tiebapic.baidu.com/forum/w%3D580/sign=976306cbae014a90813e46b599763971/4b600c338744ebf89338dd46cef9d72a6059a77a.jpg',
        'http://tiebapic.baidu.com/forum/w%3D580/sign=bd7cb9b3f1cd7b89e96c3a8b3f254291/31dfa9ec8a1363270bab7b4a868fa0ec08fac701.jpg',
    ]
    return url_list


@run_time
def download_image1(url_list):
    index = 1
    for url in url_list:
        req = requests.get(url)
        # print(req.status_code)
        content = req.content

        abs_path = 'D:/images/python_down_image/'
        timestamp = int(time.time())

        image_name = str(index) + '_' + str(timestamp) + '.jpg'

        path = abs_path + image_name
        with open(path, 'wb') as f:
            f.write(content)

        if index % 10 == 0:
            print("成功下载{}张图片".format(index))
        index += 1


if __name__ == '__main__':
    ret_url_list = []
    for i in range(100):
        url_list = image_url_list()
        ret_url_list.extend(url_list)

    download_image1(ret_url_list)




同步下载图片结果

成功下载600张图片
======执行函数总用时间49.80484867095947秒

2、协程并发下载图片

import requests
import time
import aiohttp
import asyncio
from downlod_image import image_url_list

abs_path = 'D:/images/python_down_image/'

ret_url_list = []
for i in range(100):
    url_list = image_url_list()
    ret_url_list.extend(url_list)


# 协程下载图片
async def fetch(session, url, path):
    async with session.get(url, verify_ssl=False) as response:
        content = await response.content.read()
        with open(path, 'wb') as f:
            f.write(content)


async def main():
    async with aiohttp.ClientSession() as session:
        # 图片url列表
        url_list = ret_url_list
        tasks = []
        index = 1

        for url in url_list:
            # 图片命名
            timestamp = int(time.time())
            image_name = str(index) + '_' + str(timestamp) + '.jpg'
            path = abs_path + image_name

            task = asyncio.create_task(fetch(session, url, path))
            tasks.append(task)
            index += 1
        print("=================tasks:", tasks)
        print("=================tasks_count:", len(tasks))

        await asyncio.wait(tasks)

if __name__ == '__main__':
    start_time = time.time()
    asyncio.run(main())
    end_time = time.time()
    print("执行完毕一共用时{}秒".format(end_time - start_time))

协程下载结果

执行完毕一共用时4.188239574432373秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值