在aiohttp的doc中写道:
- loop - 用于处理HTTP请求的事件循环.如果loop为None,则构造函数如果指定则从连接器借用它.asyncio.get_event_loop()用于获取默认事件循环.
自2.0版以来已弃用.
我用谷歌搜索,但没有得到任何关于为什么loop参数被弃用的描述.
我经常创建这样的ClientSession对象:
loop = asyncio.get_event_loop()
session = aiohttp.ClientSession(loop=loop)
Run Code Online (Sandbox Code Playgroud)
现在loop参数被删除了,但只是在aiohttp.ClientSession()没有循环的情况下调用会得到一个警告:
在协同程序之外创建客户端会话
那么为什么不推荐使用该参数以及如何正确使用会话?
这个问题在本期中得到解决,建议在协程中创建客户端会话对象,以避免难以调试的错误。此处演示了首选用法;以供参考:
async def fetch(client):
async with client.get('http://python.org') as resp:
assert resp.status == 200
return await resp.text()
async def main():
async with aiohttp.ClientSession() as client:
html = await fetch(client)
print(html)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)