Interrupting a Function with Timeout in Python
When calling functions that may stall indefinitely, preventing the script from executing further, it becomes necessary to implement a timeout mechanism. Python's signal package provides a solution for this issue.
The signal package, primarily used in UNIX systems, allows you to set up a timeout for a specific function. If the function exceeds the specified timeout, a signal is raised to interrupt the execution.
Example:
Consider a function loop_forever() that may run indefinitely. We need to call this function but set a timeout of 5 seconds. If the function takes longer than 5 seconds, we want to cancel its execution.
import signal # Register a handler for the timeout def handler(signum, frame): print("Timeout! Cancelling function execution.") raise Exception("Timeout exceeded!") # Register the signal function handler signal.signal(signal.SIGALRM, handler) # Define a timeout of 5 seconds signal.alarm(5) try: loop_forever() except Exception as e: print(str(e)) # Cancel the timer if the function finishes before timeout signal.alarm(0)
In this example, after 5 seconds, the handler function is called, raising an exception. This exception is caught in the parent code, which then cancels the timer and terminates the execution of the loop_forever() function.
The above is the detailed content of How to Interrupt a Python Function Execution with a Timeout?. For more information, please follow other related articles on the PHP Chinese website!