redis / redis-py

Redis Python client
MIT License
12.45k stars 2.48k forks source link

Exception ignored in: <function AbstractConnection.__del__ at 0x107907240> #3239

Open chbndrhnns opened 2 months ago

chbndrhnns commented 2 months ago

Version: 5.0.4

Platform: Python 3.12, mac OS

Description:

For every test that involves a redis client, I see the error "Exception ignored in: <function AbstractConnection.del at 0x107907240>" after the test run. The test still passes but the warnings clutter the output a lot.

Is it possible to make the __del__ function not raise an exception in the case here?

Example code:

import pytest
import redis

pool = redis.asyncio.ConnectionPool(
    host="localhost",
    port=6381,
)

@pytest.fixture
def anyio_backend():
    return "asyncio"

@pytest.mark.anyio
async def test_():
    await pool.get_connection("doesnotmatter")

Test output:

test_.py::test_ PASSED                                                   [100%]

============================== 1 passed in 0.04s ===============================
Exception ignored in: <function AbstractConnection.__del__ at 0x1023bf2e0>
Traceback (most recent call last):
  File "/Users/x/Library/Caches/pypoetry/virtualenvs/pyredis-anyio-SXcw3iV0-py3.12/lib/python3.12/site-packages/redis/asyncio/connection.py", line 216, in __del__
  File "/Users/x/Library/Caches/pypoetry/virtualenvs/pyredis-anyio-SXcw3iV0-py3.12/lib/python3.12/site-packages/redis/asyncio/connection.py", line 223, in _close
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/streams.py", line 343, in close
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/selector_events.py", line 1206, in close
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/selector_events.py", line 871, in close
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/base_events.py", line 772, in call_soon
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/base_events.py", line 519, in _check_closed
RuntimeError: Event loop is closed

Process finished with exit code 0

Installed packages:

> pip freeze
anyio==4.3.0
idna==3.7
iniconfig==2.0.0
packaging==24.0
pluggy==1.5.0
pytest==8.2.1
redis==5.0.4
sniffio==1.3.1
mgvalverde commented 1 month ago

I also found this issue, in the meantime, downgrading to 4.6.0 solved the problem for me.

cymux commented 1 month ago

on python3.11 this solved by downgrade to redis = "5.0.1" (from redis = "^5.0.4")