我的应用程序每秒将通过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
它要么无法解决问题,要么引发自身错误,无法从运行的事件循环调用它。
请帮忙!!!
暂无答案!
目前还没有任何答案,快来回答吧!