Message339143
Among the first 3 things that happen in Py_FinalizeEx() are, in order:
1. wait for all non-daemon threads (of the main interpreter) to finish
2. call registered atexit funcs
3. mark the runtime as finalizing
At that point the only remaining Python threads are:
* the main thread (where finalization is happening)
* daemon threads
* non-daemon threads created in atexit functions
* any threads belonging to subinterpreters
The next time any of those threads (aside from main) acquire the GIL, we expect that they will exit via a call to PyThread_exit_thread() (caveat: issue #36475). However, we have no guarantee on when that will happen, if ever. Such lingering threads can cause problems, including crashes and deadlock (see issue #36469).
I don't know what else we can do, beyond what we're already doing. Any ideas? |
|
Date |
User |
Action |
Args |
2019-03-29 20:38:26 | eric.snow | set | recipients:
+ eric.snow |
2019-03-29 20:38:26 | eric.snow | set | messageid: <1553891906.3.0.987802696833.issue36476@roundup.psfhosted.org> |
2019-03-29 20:38:26 | eric.snow | link | issue36476 messages |
2019-03-29 20:38:26 | eric.snow | create | |
|