From a114f26c03aa9127826cf39c60c759340f93653b Mon Sep 17 00:00:00 2001 From: Utkarsh Gupta Date: Sun, 4 Dec 2022 13:34:17 +0530 Subject: Async clusters: Support creating locks inside async functions (#2471) Co-authored-by: Chayim --- redis/asyncio/cluster.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/redis/asyncio/cluster.py b/redis/asyncio/cluster.py index ac61314..5a2dffd 100644 --- a/redis/asyncio/cluster.py +++ b/redis/asyncio/cluster.py @@ -356,11 +356,13 @@ class RedisCluster(AbstractRedis, AbstractRedisCluster, AsyncRedisClusterCommand ) self._initialize = True - self._lock = asyncio.Lock() + self._lock: Optional[asyncio.Lock] = None async def initialize(self) -> "RedisCluster": """Get all nodes from startup nodes & creates connections if not initialized.""" if self._initialize: + if not self._lock: + self._lock = asyncio.Lock() async with self._lock: if self._initialize: try: @@ -378,6 +380,8 @@ class RedisCluster(AbstractRedis, AbstractRedisCluster, AsyncRedisClusterCommand async def close(self) -> None: """Close all connections & client if initialized.""" if not self._initialize: + if not self._lock: + self._lock = asyncio.Lock() async with self._lock: if not self._initialize: self._initialize = True -- cgit v1.2.1