前提:
python 3.8
aioredis==1.3.0
有时在哨兵生产中会出现以下错误:
Task was destroyed but it is pending!
task: <Task pending name='Task-16349' coro=<RedisConnection._read_data() running at /usr/local/lib/python3.8/site-packages/aioredis/connection.py:183> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x2ac9dc15e430>()]> cb=[RedisConnection.__init__.<locals>.<lambda>() at /usr/local/lib/python3.8/site-packages/aioredis/connection.py:165]>
有人遇到过吗? Рow你修好了吗?
一些附加信息。我们使用 aiohttp==3.7.3。 我的 Redis 客户端的一部分:
class RedisClient:
redis: Optional[aioredis.Redis] = None
encoding: str = 'utf-8'
@classmethod
async def create_redis_pool(cls):
if cls.redis is None:
redis_address = 'redis://%s:%d' % (settings.REDIS['host'], settings.REDIS['port'])
cls.redis = await aioredis.create_redis_pool(
redis_address,
db=settings.REDIS['db'],
minsize=settings.REDIS['minsize'],
maxsize=settings.REDIS['maxsize'],
timeout=10
)
return cls.redis
...
@classmethod
async def get(cls, key, encoding=encoding):
return await cls.redis.get(key, encoding=encoding)
在应用程序启动时创建了一个到 redis 的连接池。