Как выделить определённое время на выполнение части кода python
У меня есть функция в скрипте, которая большую часть времени работает штатно, но в некоторые моменты она вешается навсегда, а без неё работа программы невозможна. Мне надо каким-то образом сделать так, что бы если она через 5 секунд не начала работать, то она вызывалась заново, или перезапускалась, или итерация в цикле с ней пропускалась или начиналась заново, короче - что бы она не руинила всю программу. Вот код:
import requests
def prices_finder(link):
complete_string = requests.get(link, headers = Headers).text
complete_string = complete_string[187:]
minimum_purchase_price = float(complete_string[0 : complete_string.find(" ")].replace(",", "."))
raw_maximum_selling_price = complete_string[complete_string.find("<tr><th align=")+107:]
maximum_selling_price = float(raw_maximum_selling_price[:raw_maximum_selling_price.find(" ")].replace(",", "."))
return [minimum_purchase_price, maximum_selling_price]
for i in url:
price = prices_finder(i)
if price[0] < price[1]:
notification(url.index(i))
Вся проблема тут в одной строчке кода: requests.get(link, headers = Headers).text Может её чем-то заменить, если это возможно? Если нет - то лучше то, что я описал сверху.
Ответы (1 шт):
Рекомендую использовать блоки try except для обработки ошибок. Так же ты можешь с помощью библиотеки requests в методе get есть возможность указать timeout в сек.
Вот исправленный код:
def prices_finder(link):
try:
complete_string = requests.get(link, headers=Headers, timeout=5).text
complete_string = complete_string[187:]
minimum_purchase_price = float(complete_string[0:complete_string.find(" ")].replace(",", "."))
raw_maximum_selling_price = complete_string[complete_string.find("<tr><th align=") + 107:]
maximum_selling_price = float(raw_maximum_selling_price[:raw_maximum_selling_price.find(" ")].replace(",", "."))
return [minimum_purchase_price, maximum_selling_price]
except (requests.Timeout, Exception) as e:
raise RuntimeError(f"Error in : {link}: {e}")
for i in url:
price = prices_finder(i)
if price is not None and price[0] < price[1]:
notification(url.index(i))
Дополнительная документация:
https://requests.readthedocs.io/en/latest/user/quickstart/#timeouts