[Python-Dev] Usage of the multiprocessing API and object lifetime (original) (raw)

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:

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