# request.get() 同步代码 → 异步操作aiohttp
# pip install aiohttp
大概框架是:
这行代码我执行报错了,但差不都按这个格式来写
import asyncio
import time
import aiohttp
urls = [
"http://kr.shanghai-jiuxin.com/file/bizhi/20220929/ptgvyyrnvgn.jpg",
"http://kr.shanghai-jiuxin.com/file/bizhi/20220929/h0z4y4ihate.jpg",
"http://kr.shanghai-jiuxin.com/file/bizhi/20220929/iqitunma5f3.jpg",
]
async def aiodownload(url):
name = url.rsplit('/',1)[1] # 从右往左用“/”切,切成2份,然后取第2个位置的元素:ptgvyyrnvgn.jpg
# 因为异步协程,需要用async,又因为request不用close可以用上下文管理器with,所以这么写
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp: # 相当于:resp.get()
#这里请求成功,开始写入文件
# resp.content.read() # 相当于 resp.content
# resp.text() # 相当于resp.text
# resp.json() # 相当于resp.json()
with open(name ,mode='wb') as f:
f.write(await resp.content.read()) # 保存文件,并用await挂起
print('结束')
# s = aiohttp.ClientSession <==> requests 异步协程请求的这相当于requests
# 发送请求
# 得到图片
# 保存内容
async def main():
tasks = []
for url in urls:
tasks.append(asyncio.create_task(aiodownload(url)))
await asyncio.wait(tasks)
if __name__ == '__main__':
t1 = time.time()
loop = asyncio.get_event_loop() # asyncio.get_event_loop():获取一个事件循环
loop.run_until_complete(main()) # run_until_complete():将任务放到任务列表
t2 = time.time()
print('共耗时:',t2-t1)