Issue 14623: Shutdown exception in daemon thread (original) (raw)

This issue is very similar to the issue original reported in , 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?

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.