`queue.SimpleQueue.__sizeof__()` ignores the underlying data structure
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
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
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu trong Modules/_queuemodule.c, tập trung vào các triển khai SimpleQueue được liên kết trong báo cáo và việc tính kích thước của chúng. Chạy các bản tái hiện được cung cấp trên các phiên bản Python liên quan, sau đó xác minh rằng các kích thước được báo cáo bao gồm danh sách hoặc bộ đệm vòng bên dưới và khớp với các giá trị dự kiến đã nêu.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- c, python
- Lĩnh vực
- devtools
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 25/100