Handling Signals in Python Threads
The way I worked around this issue was to make a module that could kept a list of threads. The module also had a method that killed every thread in that list. I registered this method to be called when the SIGINT
signal was received. Lastly, I created a wrapper class for Thread
that would automatically add the created instance to the list of threads.
If you set newthread.daemon = True
before starting each thread, the threads will automatically be killed when the main thread exits. That's not precisely what you were asking, but from what you've described, it sounds like it could be worth knowing.
CPython Threading: Interrupting covers what happens to signals in Python threads, and various solutions to your problem. It is a good read.