Python # Таймаут на выполнение функции # Function timeout

Иногда функция может выполняться дольше чем хочется, и нужно установить таймаут на выполнение функции - чтобы выполнение просто оборвалось, если время вышло.

Я нашел такое решение: http://code.activestate.com/recipes/473878/

Там - написана такая функция:

def timeout(func, args=(), kwargs={}, timeout_duration=1, default=None)
    # ...

Которую легко использовать, например, так:

def get_feed_index(url, limit=None):
    import feedparser
    data = timeout(feedparser.parse, (url,), timeout_duration=10.0)
    if data:
        # process data
    else:
        raise Exception("Reading feed timeout! URL = %s" % url)

То есть, мы захотели прочитать rss-фид, но feedparser не дает установить таймаут соединения, а ждать бесконечно долго тоже не круто. Поэтому он запускается в обертке timeout, а по таймауту выполнение просто обрывается и возвращается None. Удобно :)

Выложил сниппет: http://bitbucket.org/rudi/rudi/src/tip/python/feed_timeout.py

Notes

  1. rudyryk posted this