【发布时间】:2021-07-19 15:44:47
【问题描述】:
我创建了一个小类来执行 redis 的基本操作,使用 aioredis。
class RedisService:
def __init__(self, r_url) -> str:
self.redis = r_url
async def create_connection(self):
return await aioredis.create_redis(self.redis)
async def _get(self, key) -> str:
try:
return await self.create_connection().get(key, encoding='utf-8')
finally:
await self._close()
async def _set(self, key, value) -> None:
await self.create_connection().set(key, value)
await self._close()
async def _close(self) -> None:
self.create_connection().close()
await self._redis.wait_closed()
还有一个测试处理程序来调用 redis 的写/读操作
@router.post('/perform')
async def index():
key = 'test'
value = 'test'
value = await RedisService(r_url)._set(key, value)
return {'result': value}
但报错
await self.create_connection.set(key, value)
AttributeError: ''coroutine'' object has no attribute 'set'
我猜问题可能是异步代码必须通过事件循环运行
asyncio.run(some coroutine)
但我不明白如何将这个逻辑构建到我的代码中
【问题讨论】:
-
回溯中的代码和您发布的代码不同。根据回溯,您似乎缺少一对括号,您在其中调用
set:await self.create_connection().set(key, value)。根据您发布的代码 sn-p,您在调用get()时缺少括号:await self.create_connection().get(key, encoding='utf-8')
标签: python redis async-await python-asyncio aioredis