Hier mal ein Beispiel:
Code: Alles auswählen
from signal import signal
from signal import alarm
from signal import SIGALRM
from contextlib import contextmanager
def callback(*args):
raise TimeoutError
@contextmanager
def timeout(delay, fail=True):
signal(SIGALRM, callback)
alarm(delay)
try:
yield
except TimeoutError:
if fail:
raise
Code: Alles auswählen
with timeout(5):
input('Wie ist dein Name: ')
Wenn man z.B. erst den Handler im main thread setzt, dann neue threads erstellt, so bekommen alle Threads auch SIGALRM und müssten entsprechend auch einen TimeoutError bekommen.
Überleg dir mal was, wie man einen Contextmanager mit threading.Timer nutzen könnte.
