Error: Event loop is closed when running asyncio + sentinel examples · Issue #3431 · redis/redis-py (original) (raw)

Version: redis-py: 5.2 / redis 6.2.7

Platform: Python 3.12.7 on Debian (Docker container: python:3.12.7-slim-bookworm)

Description: Running the example provided in redis-py documentation to connect to sentinel using asyncio:

import asyncio from redis.asyncio.sentinel import Sentinel

async def main(): sentinel = Sentinel([("localhost", 26379), ("sentinel2", 26379)]) r = sentinel.master_for("mymaster")

ok = await r.set("key", "value")
assert ok
val = await r.get("key")
assert val == b"value"

if name == "main": asyncio.run(main())

I get this error:

Exception ignored in: <function AbstractConnection.__del__ at 0x7f53bc6e14e0>
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/redis/asyncio/connection.py", line 215, in __del__
    f"unclosed Connection {self!r}", ResourceWarning, source=self
                          ^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/redis/asyncio/sentinel.py", line 35, in __repr__
    f"(service={pool.service_name}"
                ^^^^^^^^^^^^^^^^^
ReferenceError: weakly-referenced object no longer exists

If I try to close the connection after assert val == b"value":

... assert val == b"value" await r.aclose() ...

I get this error:

Exception ignored in: <function AbstractConnection.__del__ at 0x7ff6587ed580>
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/redis/asyncio/connection.py", line 217, in __del__
    self._close()
  File "/usr/local/lib/python3.12/site-packages/redis/asyncio/connection.py", line 224, in _close
    self._writer.close()
  File "/usr/local/lib/python3.12/asyncio/streams.py", line 358, in close
    return self._transport.close()
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/asyncio/selector_events.py", line 1210, in close
    super().close()
  File "/usr/local/lib/python3.12/asyncio/selector_events.py", line 875, in close
    self._loop.call_soon(self._call_connection_lost, None)
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 795, in call_soon
    self._check_closed()
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 541, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

Checking with older redis-py versions, I've checked that this code worked fine in redis==5.0.0 and redis==5.0.1, but started to fail in redis==5.0.2