NameError: Value not defined in two threads-only pool tests when ctypes is unavailable
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
In Lib/test/_test_multiprocessing.py, both
test_imap_and_imap_unordered_when_buffer_is_full and
test_imap_and_imap_unordered_with_buffersize_when_buffer_is_full create a
shared value with a module-level Value:
last_produced_task_arg = Value("i")
But Value is only conditionally imported at the top of the module:
try:
from multiprocessing.sharedctypes import Value, copy
HAS_SHAREDCTYPES = True
except ImportError:
HAS_SHAREDCTYPES = False
So when ctypes/sharedctypes are unavailable (HAS_SHAREDCTYPES == False), the
name Value is undefined. Unlike the other sharedctypes-based tests in this
file (which use @unittest.skipUnless(HAS_SHAREDCTYPES, ...)), these two tests
have no such guard, so they run and raise:
NameError: name 'Value' is not defined. Did you mean: 'self.Value'?
Reproduced in verbose mode as 4 errors (2 tests x {imap, imap_unordered})
when running test_multiprocessing_forkserver.test_threads on a build without
ctypes.
These tests are threads-only (they call skipTest() for other backends), so
self.Value resolves to multiprocessing.dummy.Value and does not depend on
ctypes. Replacing Value("i") with self.Value("i", 0):
- fixes the NameError on builds without ctypes, and
- matches how the rest of the suite creates shared values. Since both
forms initialize the value to zero, there is no behavior change when
ctypes is available.
Proposed fix:
- last_produced_task_arg = Value("i")
+ last_produced_task_arg = self.Value("i", 0)
This is my first contribution to CPython. I used Claude and opencode to help
me understand the codebase, and vim to edit the file. I reviewed and tested
the change myself; please let me know if I missed any process step
Linked PRs
- gh-155333
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in Lib/test/_test_multiprocessing.py und untersuche test_imap_and_imap_unordered_when_buffer_is_full sowie test_imap_and_imap_unordered_with_buffersize_when_buffer_is_full. Führe test_multiprocessing_forkserver.test_threads auf einem Build ohne ctypes aus; fertig ist es, wenn beide Tests den NameError vermeiden und der Testlauf erfolgreich ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- testing
- Issue-Typ
- Bug
- Schwierigkeit
- 1/5
- Geschätzter Aufwand
- Unter einer Stunde
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 25/100