`queue.SimpleQueue.__sizeof__()` ignores the underlying data structure
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
queue.SimpleQueue (C level) uses a list on Python < 3.13[1][2][3][4], a ring buffer on Python >= 3.13[5][6]. However, it does not implement its own __sizeof__() method, and as a result, only the size of the simplequeueobject structure itself (basicsize) is taken as the size of the object, while the size of the underlying structure is ignored.
>>> from queue import SimpleQueue
>>> q = SimpleQueue()
>>> q.__sizeof__()
72 # 56 on Python < 3.13
>>> for _ in range(1_000):
... q.put(object())
...
>>> q.__sizeof__()
72 # 56 on Python < 3.13
Expected (should be, on Python >= 3.13):
>>> from queue import SimpleQueue
>>> q = SimpleQueue()
>>> q.__sizeof__()
136 # == 72 + 8*8 == sizeof(simplequeueobject) + sizeof(PyObject *)*INITIAL_RING_BUF_CAPACITY
>>> for _ in range(1_000):
... q.put(object())
...
>>> q.__sizeof__()
8264 # == 72 + 8*1024 == sizeof(simplequeueobject) + sizeof(PyObject *)*pow(2, ceil(log2(1000)))
CPython versions tested on:
3.9, 3.10, 3.11, 3.12, 3.13, 3.14
Operating systems tested on:
Linux
Linked PRs
- gh-140086
- gh-143137
- gh-143277
Guide de contribution
Ouvrir 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.
Piste de recherche
Commencez dans Modules/_queuemodule.c, en vous concentrant sur les implémentations de SimpleQueue référencées dans le rapport et sur le calcul de leur taille. Exécutez les reproductions fournies avec les versions pertinentes de Python, puis vérifiez que les tailles indiquées incluent la liste ou le tampon circulaire sous-jacent et correspondent aux valeurs attendues indiquées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, python
- Domaine
- devtools
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 25/100