[Python-Dev] Usage of the multiprocessing API and object lifetime

Victor Stinner vstinner at redhat.com
Tue Dec 11 11:22:49 EST 2018


Le mar. 11 déc. 2018 à 17:06, Antoine Pitrou <solipsis at pitrou.net> a écrit :
> > We are not talking about simple strings, but processes and threads.
>
> Right, but do those have an impact on the program's correctness, or
> simply on its performance (or memory consumption)?

Performance.

I made a similar change in the socketserver: server_close() now waits
until child processes (ForkingMixIn) and threads (ThreadingMixIn)
complete:

* https://bugs.python.org/issue31233
* https://bugs.python.org/issue31151

I added an opt-in option "block_on_close" to get Python 3.6 behavior
on server_close():

https://bugs.python.org/issue33540

I don't know if these changes are similar to my questions about
multiprocessing API, since socketserver didn't expose the list of
processes/threads and doesn't provide a method to wait until they
complete. Well... ForkingMixIn has an *undocumented*
collect_children() which is non-blocking by default (I added a
keyword-only 'blocking' parameter).


Another example: the close() method of an asyncio event loop doesn't
wait until threads/processes complete:

"asyncio: BaseEventLoop.close() shutdowns the executor without waiting
causing leak of dangling threads"
https://bugs.python.org/issue34037

It's unclear to me how this issue should be fixed.

Victor


More information about the Python-Dev mailing list