aioredis 任务已销毁但未决

Ego*_*kov 6 python aio redis python-asyncio

先决条件:

python 3.8
aioredis==1.3.0
Run Code Online (Sandbox Code Playgroud)

有时在哨兵的生产中会出现以下错误:

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]>
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个??你修好了吗?

一些额外的信息。我们使用 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)
Run Code Online (Sandbox Code Playgroud)

在应用程序启动时创建了一个到 redis 的连接池。