Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32.3k
gh-132969: Fix error/hang when shutdown(wait=False) and task exited abnormally#133222
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Conversation
…ted abnormallyWhen shutdown is called with wait=False, the executor thread keeps runningeven after the ProcessPoolExecutor's state is reset. The executor then triesto replenish the worker processes pool resulting in an error and a potential hangwhen it comes across a worker that has died. Fixed the issue by having_adjust_process_count() return without doing anything if the ProcessPoolExecutor'sstate has been reset.Added unit tests to validate two scenarios:max_workers < num_tasks (exception)max_workers > num_tasks (exception + hang)
Most changes to Pythonrequire a NEWS entry. Add one using theblurb_it web app or theblurb command-line tool. If this change has little impact on Python users, wait for a maintainer to apply the |
… into origin/mainSkip forkserver-dependent test on Windows
python-cla-botbot commentedApr 30, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@hugovk: If this is indeed a blocker for the beta, +1 for me -- it shouldn'tbreak anything. But, as week-old issue that affects 3.12+, I think it's OK to defer it. @itamaro: Did you intend this to block the beta? |
Should have said it here, not only in Discord :) |
Thanks all, it's been looked at and sounds like it can wait, so let's defer it. |
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Misc/NEWS.d/next/Library/2025-04-30-19-32-18.gh-issue-132969.EagQ3G.rst OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
…nittest.skipIf annotationto skip test on win32, add some more comments
Misc/NEWS.d/next/Library/2025-04-30-19-32-18.gh-issue-132969.EagQ3G.rst OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
…agQ3G.rstCo-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
tabrezm commentedJun 3, 2025
Does this fix supersedethis one? |
The two are addressing different issues, the referenced PR will not prevent the error that I am fixing in this one. |
bedevere-bot commentedJun 9, 2025
🤖 New build scheduled with the buildbot fleet by@encukou for commit4f46875 🤖 Results will be shown at: https://buildbot.python.org/all/#/grid?branch=refs%2Fpull%2F133222%2Fmerge If you want to schedule another build, you need to add the🔨 test-with-buildbots label again. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Thank you! I started the buildbots; if they like the PR I'll merge it.
(Don't be alarmed if there are failures; not all buildbots are stable.)
598aa7c
intopython:mainUh oh!
There was an error while loading.Please reload this page.
Thanks@ogbiggles for the PR, and@encukou for merging it 🌮🎉.. I'm working now to backport this PR to: 3.13. |
Thanks@ogbiggles for the PR, and@encukou for merging it 🌮🎉.. I'm working now to backport this PR to: 3.14. |
…ited abnormally (pythonGH-133222)When shutdown is called with wait=False, the executor thread keeps runningeven after the ProcessPoolExecutor's state is reset. The executor then triesto replenish the worker processes pool resulting in an error and a potential hangwhen it comes across a worker that has died. Fixed the issue by having_adjust_process_count() return without doing anything if the ProcessPoolExecutor'sstate has been reset.Added unit tests to validate two scenarios:max_workers < num_tasks (exception)max_workers > num_tasks (exception + hang)(cherry picked from commit598aa7c)Co-authored-by: Ajay Kamdar <140011370+ogbiggles@users.noreply.github.com>
GH-135343 is a backport of this pull request to the3.13 branch. |
…ited abnormally (pythonGH-133222)When shutdown is called with wait=False, the executor thread keeps runningeven after the ProcessPoolExecutor's state is reset. The executor then triesto replenish the worker processes pool resulting in an error and a potential hangwhen it comes across a worker that has died. Fixed the issue by having_adjust_process_count() return without doing anything if the ProcessPoolExecutor'sstate has been reset.Added unit tests to validate two scenarios:max_workers < num_tasks (exception)max_workers > num_tasks (exception + hang)(cherry picked from commit598aa7c)Co-authored-by: Ajay Kamdar <140011370+ogbiggles@users.noreply.github.com>
GH-135344 is a backport of this pull request to the3.14 branch. |
…xited abnormally (GH-133222) (GH-135344)gh-132969: Fix error/hang when shutdown(wait=False) and task exited abnormally (GH-133222)When shutdown is called with wait=False, the executor thread keeps runningeven after the ProcessPoolExecutor's state is reset. The executor then triesto replenish the worker processes pool resulting in an error and a potential hangwhen it comes across a worker that has died. Fixed the issue by having_adjust_process_count() return without doing anything if the ProcessPoolExecutor'sstate has been reset.Added unit tests to validate two scenarios:max_workers < num_tasks (exception)max_workers > num_tasks (exception + hang)(cherry picked from commit598aa7c)Co-authored-by: Ajay Kamdar <140011370+ogbiggles@users.noreply.github.com>
…xited abnormally (GH-133222) (GH-135343)gh-132969: Fix error/hang when shutdown(wait=False) and task exited abnormally (GH-133222)When shutdown is called with wait=False, the executor thread keeps runningeven after the ProcessPoolExecutor's state is reset. The executor then triesto replenish the worker processes pool resulting in an error and a potential hangwhen it comes across a worker that has died. Fixed the issue by having_adjust_process_count() return without doing anything if the ProcessPoolExecutor'sstate has been reset.Added unit tests to validate two scenarios:max_workers < num_tasks (exception)max_workers > num_tasks (exception + hang)(cherry picked from commit598aa7c)Co-authored-by: Ajay Kamdar <140011370+ogbiggles@users.noreply.github.com>
…ited abnormally (pythonGH-133222)When shutdown is called with wait=False, the executor thread keeps runningeven after the ProcessPoolExecutor's state is reset. The executor then triesto replenish the worker processes pool resulting in an error and a potential hangwhen it comes across a worker that has died. Fixed the issue by having_adjust_process_count() return without doing anything if the ProcessPoolExecutor'sstate has been reset.Added unit tests to validate two scenarios:max_workers < num_tasks (exception)max_workers > num_tasks (exception + hang)
…3222that is accepted and merged.
Uh oh!
There was an error while loading.Please reload this page.
When shutdown is called with wait=False, the executor thread keeps running even after the ProcessPoolExecutor's state is reset. The executor then tries to replenish the worker processes pool resulting in an error and a potential hang when it comes across a worker that has died. Fixed the issue by having _adjust_process_count() return without doing anything if the ProcessPoolExecutor's state has been reset.
Added unit tests to validate two scenarios:
max_workers < num_tasks (exception)
max_workers > num_tasks (exception + hang)
ProcessPoolExecutor
raises exception or hangs the process whenshutdown(wait=False)
and worker throws exception #132969