@Lepilov

Ошибка выполнения ассинхронного кода при подключении к редис?

Есть класс с базовым функционалом выполнения запросов к редис (через 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()


И хендлер для проверки работоспособности
@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)

но вот как его прикрутить не могу догнать, хотя возможно не только в этом дело.

В доках это выглядит как то так
import asyncio
import aioredis


async def main():
    # Redis client bound to single connection (no auto reconnection).
    redis = await aioredis.create_redis(
        'redis://localhost')
    await redis.set('my-key', 'value')
    val = await redis.get('my-key')
    print(val)

    # gracefully closing underlying connection
    redis.close()
    await redis.wait_closed()

    await redis.wait_closed()

if __name__ == '__main__':
    asyncio.run(main())
  • Вопрос задан
  • 375 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы