[英]How I can reuse aiohttp.ClientSession?
我正在构建自己的异步 python package 并遇到了问题。
这是我的代码:
class Client:
"""
Async client for making requests
"""
def __init__(self, base_url: str = BASE_URL) -> None:
self.base_url = base_url
self.session = ClientSession()
async def get(self, method: str, *args: tp.Any, **kwargs: tp.Any) -> tp.Any:
async with self.session.get(f'{self.base_url}/{method}', *args, **kwargs) as response:
data = await response.json()
return data
当我尝试使用这样的东西时:
await client.get()
我明白了
RuntimeError: Timeout context manager should be used inside a task
我想这个错误的原因是调用ClientSession()
不在协程内。 但我希望有人知道重用ClientSession()
的方法
我已经阅读了其他类似的问题,但它们不适合我的情况。
您可以在需要时初始化(和缓存)session:
class Client:
"""
Async client for making requests
"""
def __init__(self, base_url: str = BASE_URL) -> None:
self.base_url = base_url
self.session = None
async def get(self, method: str, *args: tp.Any, **kwargs: tp.Any) -> tp.Any:
if not self.session:
self.session = ClientSession()
async with self.session.get(f'{self.base_url}/{method}', *args, **kwargs) as response:
data = await response.json()
return data
根据您使用Client
的方式,您还可以为 session object 使用class属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.