我的应用程序将每秒通过redis发送数百条(如果不是数千条)消息,因此我们将在应用程序启动时打开连接,并在每次交易中使用该连接。我很难保持连接畅通
以下是我的一些redis处理程序类:
class RedisSingleDatabase(AsyncGetSetDatabase):
async def redis(self):
if not self._redis:
self._redis = await aioredis.create_redis(('redis', REDIS_PORT))
return self._redis
def __init__(self):
self._redis = None
async def get(self, key):
r = await self.redis()
# r = await aioredis.create_redis(('redis', REDIS_PORT))
print(f'CONNECTION IS {"CLOSED" if r.closed else "OPEN"}!')
data = await r.get(key, encoding='utf-8')
if data is not None:
return json.loads(data)
这是行不通的。当我们调用r.get
时,连接已关闭(ConnectionClosedError
)
如果我取消对get
方法的第二行的注释,并在该方法中本地连接到数据库,它就会工作。但是我们不再使用相同的连接
我也考虑过使用依赖注入来尝试这一切。这是一个flask应用程序,在我的create_app
方法中,我将连接到数据库并使用该连接构造我的RedisSingleDatabase
。除了我当前的问题是否相同之外,我似乎无法让这种方法起作用,因为我们需要await
连接,我无法在我的根级别create_app
进行连接,这不能是异步的!(除非我遗漏了什么)
我已经到处尝试了asyncio.run
,它要么没有解决问题,要么引发了自己的错误,无法从正在运行的事件循环调用它
请帮忙
目前没有回答
相关问题 更多 >
编程相关推荐