Begrenzung der Ausführungszeit eines Funktionsaufrufs
Sie sind in Ihrem Code auf einen Socket-bezogenen Funktionsaufruf gestoßen, der gelegentlich eine erweiterte Blockierung aufweist. zeitweise Stunden erreichen. Dies stellt eine inakzeptable Situation dar. Um dieses Problem zu entschärfen, suchen Sie in Ihrem Code nach einer Lösung, um die Ausführungszeit der Funktion zu begrenzen.
Wie in der akzeptierten Antwort vorgeschlagen, kann die Verwendung eines anderen Threads eine Lösung darstellen. Ein erweiterter Ansatz besteht jedoch darin, die with-Anweisung zu verwenden, die syntaktischen Komfort für die Timeout-Funktion bietet:
import signal from contextlib import contextmanager class TimeoutException(Exception): pass @contextmanager def time_limit(seconds): def signal_handler(signum, frame): raise TimeoutException("Timed out!") signal.signal(signal.SIGALRM, signal_handler) signal.alarm(seconds) try: yield finally: signal.alarm(0) try: with time_limit(10): long_function_call() except TimeoutException as e: print("Timed out!")
Mit diesem Ansatz können Sie den Timeout innerhalb eines Blocks eleganter handhaben und eine TimeoutException auslösen, wenn die Funktion den Timeout überschreitet innerhalb der vorgesehenen Frist.
Das obige ist der detaillierte Inhalt vonWie kann die Ausführungszeit eines blockierenden Funktionsaufrufs in Python begrenzt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!