jararaca 0.3.12a12__py3-none-any.whl → 0.3.12a14__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of jararaca might be problematic. Click here for more details.

@@ -58,6 +58,7 @@ class RedisWebSocketConnectionBackend(WebSocketConnectionBackend):
58
58
  send_pubsub_channel: str,
59
59
  consume_broadcast_timeout: int = 1,
60
60
  consume_send_timeout: int = 1,
61
+ retry_delay: float = 5.0,
61
62
  ) -> None:
62
63
 
63
64
  self.redis = conn
@@ -69,6 +70,7 @@ class RedisWebSocketConnectionBackend(WebSocketConnectionBackend):
69
70
 
70
71
  self.consume_broadcast_timeout = consume_broadcast_timeout
71
72
  self.consume_send_timeout = consume_send_timeout
73
+ self.retry_delay = retry_delay
72
74
  self.__shutdown_event: asyncio.Event | None = None
73
75
 
74
76
  self.__send_func: SendFunc | None = None
@@ -154,7 +156,10 @@ class RedisWebSocketConnectionBackend(WebSocketConnectionBackend):
154
156
  logger.warning(
155
157
  "Broadcast task completed, but shutdown event is not set. This is unexpected."
156
158
  )
157
- self.setup_broadcast_consumer()
159
+ # Add delay before retrying to avoid excessive CPU usage
160
+ asyncio.get_event_loop().create_task(
161
+ self._retry_broadcast_consumer_with_delay()
162
+ )
158
163
 
159
164
  def handle_send_task_done(self, task: asyncio.Task[Any]) -> None:
160
165
  if task.cancelled():
@@ -170,6 +175,29 @@ class RedisWebSocketConnectionBackend(WebSocketConnectionBackend):
170
175
  logger.warning(
171
176
  "Send task completed, but shutdown event is not set. This is unexpected."
172
177
  )
178
+ # Add delay before retrying to avoid excessive CPU usage
179
+ asyncio.get_event_loop().create_task(self._retry_send_consumer_with_delay())
180
+
181
+ async def _retry_broadcast_consumer_with_delay(self) -> None:
182
+ """Retry setting up broadcast consumer after a delay to avoid excessive CPU usage."""
183
+ logger.info(
184
+ f"Waiting {self.retry_delay} seconds before retrying broadcast consumer..."
185
+ )
186
+ await asyncio.sleep(self.retry_delay)
187
+
188
+ if not self.shutdown_event.is_set():
189
+ logger.info("Retrying broadcast consumer setup...")
190
+ self.setup_broadcast_consumer()
191
+
192
+ async def _retry_send_consumer_with_delay(self) -> None:
193
+ """Retry setting up send consumer after a delay to avoid excessive CPU usage."""
194
+ logger.info(
195
+ f"Waiting {self.retry_delay} seconds before retrying send consumer..."
196
+ )
197
+ await asyncio.sleep(self.retry_delay)
198
+
199
+ if not self.shutdown_event.is_set():
200
+ logger.info("Retrying send consumer setup...")
173
201
  self.setup_send_consumer()
174
202
 
175
203
  async def consume_broadcast(