在aiohttp的doc中读到:
- 循环 - 用于处理HTTP请求的事件循环。 如果loop为None,则构造函数如果指定则从连接器借用它。 asyncio.get_event_loop()用于获取默认事件循环。
自2.0版以来已弃用。
我用谷歌搜索但没有得到关于为什么loop
参数被弃用的任何描述。
我经常创建ClientSession
这样的对象:
loop = asyncio.get_event_loop()
session = aiohttp.ClientSession(loop=loop)
现在loop
参数已被删除,但只是在没有循环的情况下调用aiohttp.ClientSession()
会收到警告:
在协程之外创建客户端会话
那么为什么不推荐使用该参数以及如何正确使用会话?
答案 0 :(得分:0)
此问题已解决in this issue,建议在协程内创建客户端会话对象,以避免难以调试的错误。首选用法是demonstrated here;供参考:
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())