Categories
Python Answers

How to time out function if it takes too long to finish with Python?

Spread the love

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.

By John Au-Yeung

Web developer specializing in React, Vue, and front end development.

Leave a Reply

Your email address will not be published. Required fields are marked *