Ошибка при совмесном подключении модулей asyncio и aioredis
Нет возможности запустить скрипт из - за использования class TimeoutError. Как в следующем коде оставить возможность подключения обоих модулей и избавиться от ошибки?
import asyncio
import aioredis
async def main():
redis = await aioredis.create_redis_pool(('localhost', 6379))
await redis.set('mykey', 'Hello world')
value = await redis.get('mykey')
print(value)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Код ошибки:
Traceback (most recent call last):
File "/opt/goinfre/werewolf/Documents/gitlab/Python_Bootcamp._Day_08-1/src/main.py", line 5, in <module>
import aioredis
File "/opt/goinfre/werewolf/homebrew/lib/python3.11/site-packages/aioredis/__init__.py", line 1, in <module>
from aioredis.client import Redis, StrictRedis
File "/opt/goinfre/werewolf/homebrew/lib/python3.11/site-packages/aioredis/client.py", line 32, in <module>
from aioredis.connection import (
File "/opt/goinfre/werewolf/homebrew/lib/python3.11/site-packages/aioredis/connection.py", line 33, in <module>
from .exceptions import (
File "/opt/goinfre/werewolf/homebrew/lib/python3.11/site-packages/aioredis/exceptions.py", line 14, in <module>
class TimeoutError(asyncio.TimeoutError, builtins.TimeoutError, RedisError):
TypeError: duplicate base class TimeoutError
Ответы (1 шт):
Ошибка TypeError: duplicate base class TimeoutError на строке class TimeoutError(asyncio.TimeoutError, builtins.TimeoutError, RedisError): возникает из-за того, что в Python 3.11 имя asyncio.TimeoutError сделано псевдонимом builtins.TimeoutError, см. документацию:
exception asyncio.TimeoutError¶
A deprecated alias of
TimeoutError, raised when the operation has exceeded the given deadline.Changed in version 3.11: This class was made an alias of
TimeoutError.
Получается, что фактически один и тот же класс указан базовым классом два раза.
Решение - или откатиться на Python 3.10, или использовать пакет redis вместо aioredis, см. README репозитория aio-libs/aioredis-py:
Aioredis is now in redis-py 4.2.0rc1+
To install, just do
pip install redis>=4.2.0rc1. The code is almost the exact same. You will just need to import like so:
from redis import asyncio as aioredisThis way you don't have to change all your code, just the imports.
Сам репозиторий aio-libs/aioredis-py сделан архивным, и видимо уже обновляться не будет. Дальнейшая разработка ведется в репозитории redis/redis-py.