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))
风月都好看,人间也浪漫.