同步编程:用时大概4秒
import time import requests def download_image(url): print("开始下载:",url) # 发送网络请求,下载图片 response = requests.get(url) print("下载完成") # 图片保存到本地文件 file_name = url.rsplit('_')[-1] with open(file_name, mode='wb') as file_object: file_object.write(response.content) if __name__ == '__main__': url_list = [ 'https://www3.autoimg.cn/newsdfs/g26/M02/35/A9/120x90_0_autohomecar__ChsEe12AXQ6AOOH_AAFocMs8nzU621.jpg', 'https://www2.autoimg.cn/newsdfs/g30/M01/3C/E2/120x90_0_autohomecar__ChcCSV2BBICAUntfAADjJFd6800429.jpg', 'https://www3.autoimg.cn/newsdfs/g26/M0B/3C/65/120x90_0_autohomecar__ChcCP12BFCmAIO83AAGq7vK0sGY193.jpg' ] start=time.time() for item in url_list: download_image(item) print(time.time()-start)
异步编程:用时小于0.5秒
import asyncio import time import aiohttp async def download_image(url): async with aiohttp.ClientSession() as session: print("开始下载:", url) async with session.get(url) as response: # 发送网络请求,下载图片 print("下载完成") # 图片保存到本地文件 content = await response.content.read() file_name = url.rsplit('_')[-1] with open(file_name, mode='wb') as file_object: file_object.write(content) async def main(): url_list = [ 'https://www3.autoimg.cn/newsdfs/g26/M02/35/A9/120x90_0_autohomecar__ChsEe12AXQ6AOOH_AAFocMs8nzU621.jpg', 'https://www2.autoimg.cn/newsdfs/g30/M01/3C/E2/120x90_0_autohomecar__ChcCSV2BBICAUntfAADjJFd6800429.jpg', 'https://www3.autoimg.cn/newsdfs/g26/M0B/3C/65/120x90_0_autohomecar__ChcCP12BFCmAIO83AAGq7vK0sGY193.jpg' ] # 方法一: task = [] for url in url_list: task.append(download_image(url)) await asyncio.gather(*task) # 方法二: # tasks=[download_image(url) for url in url_list] # await asyncio.wait(tasks) #3.8版本后不支持该写法来,最好采用await asyncio.gather(*tasks) if __name__ == '__main__': start = time.time() asyncio.run(main()) print(time.time() - start)