Menedżer kontekstu Pythona z wątkami

mamtimeout Menedżer kontekstu, który doskonale współpracuje z sygnałami, ale podnosi błąd w trybie wielowątkowym, ponieważ sygnały działają tylko w głównym wątku.

def timeout_handler(signum, frame):
    raise TimeoutException()

@contextmanager
def timeout(seconds):
    old_handler = signal.signal(signal.SIGALRM, timeout_handler)
    signal.alarm(seconds)
    try:
        yield
    finally:
        signal.alarm(0)
        signal.signal(signal.SIGALRM, old_handler)

Widziałem implementację dekoratoratimeout ale nie umiem przejśćyield klasa wewnętrzna pochodząca zthreading.Thread. Mój wariant nie działa.

@contextmanager
def timelimit(seconds):
    class FuncThread(threading.Thread):
        def run(self):
            yield

    it = FuncThread()        
    it.start()
    it.join(seconds)

    if it.isAlive():
        raise TimeoutException()

questionAnswers(4)

yourAnswerToTheQuestion