Asynchronous model fitting that allows termination in Python
Two minor notes, your terminate function should just use the is_alive test you've already defined.

def is_alive(self):
    return self.proc is not None and self.proc.is_alive()

def terminate(self):
    if self.is_alive():
        self.proc.terminate()
    self.proc = None


Also in time_elapsed you should test if self.start_time is None. That matches directly to the empty value it begins with and communicates the intent better.

def time_elapsed(self):
    if self.start_time is not None:
        return 0