Created on 2012-04-19 20:49 by mhobbs, last changed 2012-04-19 21:15 by pitrou. This issue is now closed.
|msg158746 - (view)||Author: Mike Hobbs (mhobbs)||Date: 2012-04-19 20:49|
This issue is very similar to the issue original reported in issue1722344, except that it occurs in daemon threads. Here's a sample exception: Exception in thread Thread-1 (most likely raised during interpreter shutdown): Traceback (most recent call last): File "/usr/local/lib/python2.7/threading.py", line 552, in __bootstrap_inner File "/usr/local/lib/python2.7/threading.py", line 505, in run File "/opt/8b/libr8/eb/util/graphite.py", line 86, in run File "/usr/local/lib/python2.7/Queue.py", line 168, in get File "/usr/local/lib/python2.7/threading.py", line 237, in wait <type 'exceptions.TypeError'>: 'NoneType' object is not callable Investigating line 237 in threading.py shows that RuntimeError must have been set to None. The issue appears to be that Py_Finalize wipes all globals while there are still daemon threads running. Would it be correct to terminate daemon threads prior to wiping the globals, since the threads won't be able to accomplish much anyway?
|msg158755 - (view)||Author: Antoine Pitrou (pitrou) *||Date: 2012-04-19 21:15|
> Would it be correct to terminate daemon threads prior to wiping the > globals, since the threads won't be able to accomplish much anyway? Daemon threads are not actually "terminated" by the Python interpreter, they just keep running in the background until the process exits. The situation should be much better in Python 3.2, where daemon threads are frozen (their execution is halted) when the interpreter starts to shutdown. I don't think this will be ever fixed in 2.7, though. It's a slightly delicate change.
|2012-04-19 21:15:23||pitrou||set||status: open -> closed|
nosy: + pitrou
messages: + msg158755
resolution: wont fix