Я кодирую некоторый Python, который будет обрабатывать вызов веб-сервиса.Python - Как работать с webservice, когда он недоступен?
def calculate(self):
market_supply_price = self.__price_to_pay_current_market_supply()
market_supply_price_usd = market_supply_price.get('usd')
market_supply_price_eur = market_supply_price.get('eur')
amount = '%.8f' % ((self.euro - ((self.euro*self.__tax_to_apply())+self.__extra_tax_to_apply()))/market_supply_price_eur)
return {'usd': [market_supply_price_usd, amount], 'eur': [market_supply_price_eur, amount]}
Вызов к WebService на этой линии:
market_supply_price = self.__price_to_pay_current_market_supply()
Этот частный метод делает различные вызовы к WebService и отдай мне результат. Моя проблема заключается в том, что этот веб-сервис сильно терпит неудачу. Мне нужно реализовать способ, который, если один из вызовов завершится неудачно, я буду ждать, например, 10 минут и повторю попытку, если через 10 минут снова сработает, я подожду 30 минут и повторю попытку, если через 30 минут снова не удастся, я подождите 60 минут ...
Каков наилучший способ реализовать что-то подобное в методе расчета()?
Я реализовал что-то подобное, но это выглядит неправильно, а не то, как это должно быть сделано.
def calculate(self):
try:
market_supply_price = self.__price_to_pay_current_market_supply()
except:
pass
try:
time.sleep(600)
market_supply_price = self.__price_to_pay_current_market_supply()
except:
pass
try:
time.sleep(600)
market_supply_price = self.__price_to_pay_current_market_supply()
except:
pass
try:
time.sleep(1200)
market_supply_price = self.__price_to_pay_current_market_supply()
except:
sys.exit(1)
market_supply_price_usd = market_supply_price.get('usd')
market_supply_price_eur = market_supply_price.get('eur')
amount = '%.8f' % ((self.euro - ((self.euro*self.__tax_to_apply())+self.__extra_tax_to_apply()))/market_supply_price_eur)
return {'usd': [market_supply_price_usd, amount], 'eur': [market_supply_price_eur, amount]}
Любые подсказки о том, как это сделать в правильном направлении?
С наилучшими пожеланиями,
Рассмотрите .. петли * если * вы собираетесь продолжать опрос и скрещивание пальцев. Всякий раз, когда образец повторяется более 2-3 раз, красные флаги должны подниматься. Чтобы сделать код более простым, я бы поместил код для чтения 'market_supply_price' в свою собственную функцию, так что' return' можно использовать сразу же после успеха - и затем в этот момент можно увидеть, как такой опрос «несколько родовое». Тем не менее, мой * первый * наклон будет состоять в том, чтобы: обеспечить доступ к веб-сервису * или сбой (зарегистрировать сбой и перезапустить весь процесс позже). В противном случае код просто покрывает большую проблему. – user2864740
Спасибо за ответ user2864740. Я вижу ваше мнение. Я постараюсь решить проблему, если она не сработает, запишите ее и позже перезапустите снова. Благодарю. –
рассматривают использование отдельной нити или процесса для опроса результатов веб-службы и хранения их, например. базы данных. Вместо того, чтобы вставлять вашу попытку, кроме блоков в несколько слоев, просто используйте переменную для времени, когда поток будет спать, и увеличивайте его до определенного уровня, например. 1 час. – Stefan