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