Можно ли добавить тайм-аут в блок try в python

Я пытаюсь загрузить URL-адрес, используя python-wget, загруженный из: https://pypi.python.org/pypi/wget

Этот пакет не поддерживает параметр тайм-аута, поэтому для сбоя запроса требуется некоторое время (около 10 секунд). Можно ли добавить тайм-аут в наш блок try, чтобы уменьшить время ожидания функции.

Что-то вроде этого:

try(timeout=5s):
     wget.download(URL)
except:
    print "Query timed out"

person ashdnik    schedule 24.08.2017    source источник
comment
Это невозможно. Убедитесь, что функция download принимает тайм-аут, или используйте многопоточность.   -  person tilz0R    schedule 24.08.2017
comment
Нет, но если все, что вам нужно, это тайм-аут, есть и другие способы: stackoverflow.com/questions/492519/timeout-on-a-function-call   -  person cs95    schedule 24.08.2017


Ответы (1)


Самый простой способ (т.е. если download не поддерживает тайм-аут и вы не можете изменить код) добиться этого, запустив код в другом потоке:

from threading import Thread

t = Thread(target=wget.download, args=(URL,))
t.daemon = True
t.start()
t.join(5)
if t.is_alive():
    print 'Timeout'
person freakish    schedule 24.08.2017
comment
Разве приведенный выше код не потребует непрерывного цикла после wget.download, чтобы проверить, истекло ли время ожидания? - person brianlmerritt; 27.03.2020
comment
@brianlmerritt конечно. - person freakish; 27.03.2020