Вот в исходниках:
def start_new_thread(function, args, kwargs=None): # real signature unknown; restored from __doc__
"""
start_new_thread(function, args[, kwargs])
(start_new() is an obsolete synonym)
Start a new thread and return its identifier. The thread will call the
function with positional arguments from the tuple args and keyword arguments
taken from the optional dictionary kwargs. The thread exits when the
function returns; the return value is ignored. The thread will also exit
when the function raises an unhandled exception; a stack trace will be
printed unless the exception is SystemExit.
"""
pass
По идее завершение или исключение в функции b() должно останавливать тред.