Leaked instances of DuckDBPyType since 2.0
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 48/100
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Python
- Étoiles
- 203
- Forks
- 124
- Merge moyen
- 13 h 36 min
- PR mergées (30 j)
- 61
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de duckdb/duckdb-python
-
`read_json` accepts a list of paths at runtime but the type stub only allows a single path.Peut-être pris @aleks-drozy l’a pris il y a 95 jours. Ouverteneeds triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
duckdb/duckdb-python#576 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Missing ROW_GROUPS_PER_FILE argument in write_parquet functionPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverteneeds triage
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
duckdb/duckdb-python#386 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 66/100
duckdb/duckdb-python#737 ·
Les mainteneurs répondent en général sous 1 jour
-
needs triage
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
duckdb/duckdb-python#733 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
nanobind: leaked ... when a DuckDB type is referenced in overload signature and numpy is importedOuverteneeds triage
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
duckdb/duckdb-python#732 · 5 commentaires · 3 réactions ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de duckdb/duckdb-python
Issues similaires
-
area/test type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Clodmony/starship-coop#70 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
punitarani/fli#270 ·
-
🐛 Bug 🔔 Pending processing
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
jumpserver/jumpserver#17980 ·
Les mainteneurs répondent en général sous 1 jour
-
community enhancement good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
Les mainteneurs répondent en général sous 1 jour
-
Claiming namespace `prodmetrics`Ouvertenamespace
Difficulté 2/5 1-3 heures Accessibilité débutants 60/100
EclipseFdn/open-vsx.org#15341 ·
Les mainteneurs répondent en général sous 1 jour