Skip to content

[3.8] bpo-39360: Ensure all workers exit when finalizing a multiprocessing Pool (GH-19009)#19023

Merged
miss-islington merged 1 commit intopython:3.8from
miss-islington:backport-ac10e0c-3.8
Mar 15, 2020
Merged

[3.8] bpo-39360: Ensure all workers exit when finalizing a multiprocessing Pool (GH-19009)#19023
miss-islington merged 1 commit intopython:3.8from
miss-islington:backport-ac10e0c-3.8

Conversation

@miss-islington
Copy link
Contributor

@miss-islington miss-islington commented Mar 15, 2020

When the pull is not used via the context manager or terminate() is called, there is a system in multiprocessing.util that handles finalization of all pools via an atexit handler (the Finalize) class. This class registers the _terminate_pool handler in the registry of finalizers of the module, and that registry is called on interpreter exit via _exit_function. The problem is that the "happy" path with the context manager or manual call to finalize() does some extra steps that _terminate_pool does not. The step that is not executed when the atexit() handler calls _terminate_pool is pinging the _change_notifier queue to unblock the maintenance threads.

This commit moves the notification to the _terminate_pool function so is called from both code paths.

Co-authored-by: Pablo Galindo [email protected]
(cherry picked from commit ac10e0c)

Co-authored-by: Batuhan Taşkaya [email protected]

https://bugs.python.org/issue39360

…Pool (pythonGH-19009)

When the pull is not used via the context manager or terminate() is called, there is a system in multiprocessing.util that handles finalization of all pools via an atexit handler (the Finalize) class. This class registers the _terminate_pool handler in the registry of finalizers of the module, and that registry is called on interpreter exit via _exit_function. The problem is that the "happy" path with the context manager or manual call to finalize() does some extra steps that _terminate_pool does not. The step that is not executed when the atexit() handler calls _terminate_pool is pinging the _change_notifier queue to unblock the maintenance threads.

This commit moves the notification to the _terminate_pool function so is called from both code paths.

Co-authored-by: Pablo Galindo <[email protected]>
(cherry picked from commit ac10e0c)

Co-authored-by: Batuhan Taşkaya <[email protected]>
@miss-islington
Copy link
Contributor Author

@isidentical and @pablogsal: Status check is done, and it's a success ✅ .

2 similar comments
@miss-islington
Copy link
Contributor Author

@isidentical and @pablogsal: Status check is done, and it's a success ✅ .

@miss-islington
Copy link
Contributor Author

@isidentical and @pablogsal: Status check is done, and it's a success ✅ .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type-bug An unexpected behavior, bug, or error

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants