Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: set a max jobs on win32 to avoid too many handles #1964

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

pylbert
Copy link

@pylbert pylbert commented Feb 12, 2025

This commit fixes the issue of too many handles on win32 when --jobs=auto. This is done by setting the job_count to the minimum value between multiprocessing.cpu_count() and 61.

See Python Issue 26903 for more information.

Example failure for Python 3.10.15 with flake8 7.1.0 on Windows Server 2022 Standard 21H2:

flake8.EXE myfile.py --jobs=auto
Exception in thread Thread-1 (_handle_workers):
Traceback (most recent call last):
  File "lib\threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "lib\threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "lib\multiprocessing\pool.py", line 522, in _handle_workers
    cls._wait_for_updates(current_sentinels, change_notifier)
  File "lib\multiprocessing\pool.py", line 502, in _wait_for_updates
    wait(sentinels, timeout=timeout)
  File "lib\multiprocessing\connection.py", line 879, in wait
    ready_handles = _exhaustive_wait(waithandle_to_obj.keys(), timeout)
  File "lib\multiprocessing\connection.py", line 811, in _exhaustive_wait
    res = _winapi.WaitForMultipleObjects(L, False, timeout)
ValueError: need at most 63 handles, got a sequence of length 194

@pylbert pylbert force-pushed the fix/checker/too_many_handles_on_win32 branch from 0c41943 to 09626c9 Compare February 13, 2025 04:38
This commit fixes the issue of too many handles on win32 when `--jobs=auto`.
This is done by setting the `job_count` to the minimum value between
`multiprocessing.cpu_count()` and 61.  This happens when a machine has >
61 logic processors and `multiprocessing.cpu_count()` returns a value
greater than 61.

See [Python Issue 26903](https://bugs.python.org/issue26903) for more information.

Example failure for Python 3.10.15 with flake8 7.1.0 on Windows 11:

```bash
flake8.EXE myfile.py --jobs=auto
Exception in thread Thread-1 (_handle_workers):
Traceback (most recent call last):
  File "lib\threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "lib\threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "lib\multiprocessing\pool.py", line 522, in _handle_workers
    cls._wait_for_updates(current_sentinels, change_notifier)
  File "lib\multiprocessing\pool.py", line 502, in _wait_for_updates
    wait(sentinels, timeout=timeout)
  File "lib\multiprocessing\connection.py", line 879, in wait
    ready_handles = _exhaustive_wait(waithandle_to_obj.keys(), timeout)
  File "lib\multiprocessing\connection.py", line 811, in _exhaustive_wait
    res = _winapi.WaitForMultipleObjects(L, False, timeout)
ValueError: need at most 63 handles, got a sequence of length 194
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant