Leaked instances of DuckDBPyType since 2.0
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
Línea de trabajo
Start by running the pure Python reproducer with DuckDB 2.0, then compare it with the torch and typing.overload scenario. The issue points to DuckDBPyConnection annotations being retained during shutdown and reports leaks in nanobind bindings, but names no source file or test. Done means the reproducer exits without nanobind leak reports.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happens?
Since 2.0, our runtimes end with what looks like leaked instances of DuckDBPyType.
nanobind: leaked 27 instances!
- leaked instance 0x64c7922f1c50 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922f1c10 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e85b0 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e86d0 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e85d0 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8630 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8610 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8730 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922f1c70 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e87d0 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8670 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8690 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8810 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922f1c30 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8590 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8770 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e87b0 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e85f0 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e86f0 of type "_duckdb._sqltypes.DuckDBPyType"
- leaked instance 0x64c7922e8710 of type "_duckdb._sqltypes.DuckDBPyType"
- ... skipped remainder
nanobind: leaked 6 types!
- leaked type "_duckdb._sqltypes.DuckDBPyType"
- leaked type "_duckdb.DuckDBPyConnection"
- leaked type "FunctionNullHandling"
- leaked type "PythonUDFType"
- leaked type "ExplainType"
- leaked type "PythonExceptionHandling"
nanobind: leaked 84 functions!
- leaked function "extract_statements"
- leaked function "__exit__"
- leaked function "fetchdf"
- leaked function "_statement_count"
- leaked function "install_extension"
- leaked function "array_type"
- leaked function ""
- leaked function "interrupt"
- leaked function "_own_sources"
- leaked function "torch"
- ... skipped remainder
nanobind: this is likely caused by a reference counting issue in the binding code.
See https://nanobind.readthedocs.io/en/latest/refleaks.html
To Reproduce
It seems this is due to interaction with other libs, torch in particular, and typing.overload.
This is a pure Python reproducer
import ctypes
import duckdb
ctypes.pythonapi.Py_IncRef(ctypes.py_object(duckdb.DuckDBPyConnection))
Here is a more realistic scenario.
$ cat lib.py
import typing
import duckdb
class Wrapper:
def __init__(self, con: duckdb.DuckDBPyConnection): ...
# typing.overload stores the function in typing._overload_registry, which is not
# released at shutdown once torch has been imported.
@typing.overload
def f(x: int) -> None: ...
$ cat repro_torch.py
"""duckdb + torch + a module with a typing.overload and a DuckDBPyConnection annotation."""
import torch # noqa: F401
import lib # noqa: F401
Running python repro_torch.py provides the same error message.
OS:
Ubuntu 26
DuckDB Version:
2.0
DuckDB Client:
Python
Hardware:
No response
Full Name:
Jakob Stigenberg
Affiliation:
Qubos Systematic
Did you include all relevant configuration (e.g., CPU architecture, Linux distribution) to reproduce the issue?
- Yes, I have
Did you include all code required to reproduce the issue?
- Yes, I have
Did you include all relevant data sets for reproducing the issue?
Not applicable - the reproduction does not require a data set
- Lenguaje dominante
- Python
- Estrellas
- 203
- Forks
- 124
- Merge medio
- 13 h 36 min
- PR fusionados (30 d)
- 61
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de duckdb/duckdb-python
-
`read_json` accepts a list of paths at runtime but the type stub only allows a single path.Posiblemente ocupada @aleks-drozy la tomó hace 95 días. Abiertoneeds triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
duckdb/duckdb-python#576 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Missing ROW_GROUPS_PER_FILE argument in write_parquet functionPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertoneeds triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
duckdb/duckdb-python#386 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 66/100
duckdb/duckdb-python#737 ·
Los mantenedores suelen responder en 1 día
-
needs triage
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
duckdb/duckdb-python#733 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
nanobind: leaked ... when a DuckDB type is referenced in overload signature and numpy is importedAbiertoneeds triage
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
duckdb/duckdb-python#732 · 5 comentarios · 3 reacciones ·
Los mantenedores suelen responder en 1 día
Todos los issues de duckdb/duckdb-python
Issues similares
-
community enhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
Hochfrequenz/sapgui.mcp#1039 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
didi/helixharness#18 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
API /search : typer la réponseAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
dataforgoodfr/democracy-watch#46 · 1 reacción ·