Loading

5.异步和非异步模块组合


import asyncio
import requests


async def download_image(url):
    # 发送请求下载图片,遇到网络下载图片时候的IO请求,自动切换其他任务
    print('开始下载', url)
    loop = asyncio.get_event_loop()
    # requests模块默认不支持异步操作,所有使用线程池配合实现
    # executor 可以是  ThreadPoolExecutor / ProcessPool  , 如果是None 则使用默认线程池
    future = loop.run_in_executor(None, requests.get, url)
    res = await future
    print('下载完成')


if __name__ == '__main__':
    url_list = [
        'https://www.autoimg.cn/img/xxxxx.jpg'
        'https://www.autoimg.cn/img/xxxxx.jpg'
        'https://www.autoimg.cn/img/xxxxx.jpg'
        'https://www.autoimg.cn/img/xxxxx.jpg'
    ]
    tasks = [download_image(url) for url in url_list]
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))

 

posted @ 2022-08-21 22:38  木子七  阅读(27)  评论(0编辑  收藏  举报