Sometimes, we want to time out function if it takes too long to finish with Python.
In this article, we’ll look at how to time out function if it takes too long to finish with Python.
How to time out function if it takes too long to finish with Python?
To time out function if it takes too long to finish with Python, we can use the signal module.
For instance, we write
import signal
class timeout:
def __init__(self, seconds=1, error_message='Timeout'):
self.seconds = seconds
self.error_message = error_message
def handle_timeout(self, signum, frame):
raise TimeoutError(self.error_message)
def __enter__(self):
signal.signal(signal.SIGALRM, self.handle_timeout)
signal.alarm(self.seconds)
def __exit__(self, type, value, traceback):
signal.alarm(0)
with timeout(seconds=3):
time.sleep(4)
to create the timeout class.
It has the handle_timeout method that raises a TimeoutError.
And it has the __enter__ method that calls signal.signal to listen for the the signal.SIGALRM signal and calls handle_timeout if it’s emitted.
And then we call signal.alarm with the timeout value to emit the signal.SIGALRM signal after seconds has elapsed.
In __exit__ we call signal_alarm with with 0 to reset the alarm.
Then we call timeout with the seconds argument to raise a TimeoutError if the code in the with block has timed out.
Conclusion
To time out function if it takes too long to finish with Python, we can use the signal module.