在执行aiohttp时:Task exception was never retrieved
future: <Task finished name=‘Task-3’ coro=<get_url() done, defined at C://async_get.py:52> exception=RuntimeError(‘Session is closed’)>
Traceback (most recent call last):
raise RuntimeError(“Session is closed”)
RuntimeError: Session is closed
解决:
下列代码报错
asyncio.run(main())
更改为:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
如果有更好的方法,欢迎留言…
拓展
代码:
import aiohttp
import asyncio
import async_timeout
async def fetch(session, url):
with async_timeout.timeout(10):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, ‘https://afcentry.cn’)
print(html)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
aiohttp客户端
aiohttp的另一个主要作用是作为异步客户端,用来解决高并发请求的情况。比如现在我要模拟一个高并发请求来测试我的服务器负载情况。所以需要在python里模拟高并发。高并发可以有多种方式,比如多线程,但是由于python本质上是没有多线程的,通过底层线程锁实现的多线程。在模型高并发时,具有线程切换和线程开销的损耗。所以我们就可以使用多协成来实现高并发。