为什么aiohttp在ClientSession中弃用了loop参数?

时间:2018-01-06 06:52:40

标签: python aiohttp

在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()会收到警告:

  

在协程之外创建客户端会话

那么为什么不推荐使用该参数以及如何正确使用会话?

1 个答案:

答案 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())