[proxy] github.com← back | site home | direct (HTTPS) ↗ | proxy home | ◑ dark◐ light

bpo-39360: Ensure all workers exit when finalizing a multiprocessing Pool by isidentical · Pull Request #19009 · python/cpython

the-knights-who-say-ni

…Pool

Co-Authored-By: Pablo Galindo <Pablogsal@gmail.com>

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request

Mar 15, 2020

…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 <Pablogsal@gmail.com>
(cherry picked from commit ac10e0c)

Co-authored-by: Batuhan Taşkaya <47358913+isidentical@users.noreply.github.com>

miss-islington added a commit that referenced this pull request

Mar 15, 2020
…Pool (GH-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 <Pablogsal@gmail.com>
(cherry picked from commit ac10e0c)

Co-authored-by: Batuhan Taşkaya <47358913+isidentical@users.noreply.github.com>

Closed