python / python/cpython

NameError: Value not defined in two threads-only pool tests when ctypes is unavailable

Open
#155,332 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

tests topic-multiprocessing
Dominant language
Python
Stars
77.2k
Forks
35.9k
PR merge metrics
PR metrics pending

Description

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in Lib/test/_test_multiprocessing.py and inspect test_imap_and_imap_unordered_when_buffer_is_full and test_imap_and_imap_unordered_with_buffersize_when_buffer_is_full. Run test_multiprocessing_forkserver.test_threads on a build without ctypes; done means both tests avoid the NameError and the test run passes.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
testing
Issue type
Bug
Difficulty
1/5
Estimated time
Under an hour
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.