我有一个类,它的属性包含一个 Redis 连接,如下所示:
import redis
class RedisService:
db = redis.Redis(host=RedisConfig.REDIS_HOST, port=RedisConfig.REDIS_PORT)
@staticmethod
def exists(key):
return RedisService.db.exists(key)
这很好用。但现在我想用异步替代品替换它:
import aioredis
class RedisService:
db = await aioredis.create_connection((RedisConfig.REDIS_HOST, RedisConfig.REDIS_PORT))
@staticmethod
async def exists(key):
value = await RedisService.db.execute('GET', key)
return value
但await
不允许为类属性赋值。如果我删除等待,当我打电话时,RedisService.exists()
我会得到:
File "./src/service/redis.py", line 12, in exists
value = await RedisService.db.execute('GET', key)
AttributeError: 'coroutine' object has no attribute 'execute'
那么如何通过等待协程为类属性赋值呢?
请注意,我直接调用await RedisService.exists()
而不创建对象实例。它应该是一个静态方法,并且由于某些 BL 原因应该在不创建实例的情况下调用。