@encthenet To make sure I understand what you're describing:Parent/main thread starts another thread (call it a worker) to do some task.Parent then continues to do <whatever>.If worker thread encounters an exception, then:parent thread should be interrupted asynchronously in the middle of whatever it happens to be doing.That interruption is in the form of the exception raised in the worker thread, raised in the parent wherever it happens to be executing.Is that correct?If so, I'm afraid I don't know of a way to achieve that in pure Python; it would need a C extension at the least. It could be done (and I've done it) if you can have the parent thread/process occasionally poll for completion/error of the worker(s), and exceptions get propagated at that time, rather than asynchronously.You can't really model your behaviour on signal handling because signals are "special" in a number of ways, and in general should be used (a) as little as possible, and (b) to do as little as possible.Being able to kill an in-progress job is fairly easy with the process pool option; you can just signal the worker to kill it, even though there's no API for it. Threads are unlikely to behave well if you try it there.