Как продолжить мою программу после отключения интернет-соединения? - PullRequest
0 голосов
/ 23 июня 2019

У меня есть такая программа:

for i in range(25200):

    time.sleep(1)
    with requests.Session() as s:
               data = {'ContractCode' : 'SAFMO98' }
               r = s.post('http://cdn.ime.co.ir/Services/Fut_Live_Loc_Service.asmx/GetContractInfo', json = data ).json()

    for key, value in r.items():
        plt.clf()
        last_prices = (r[key]['LastTradedPrice'])   
        z.append(last_prices)
        plt.figure(1)
        plt.plot(z)

Иногда сервер отклоняет соединение и выдает сообщение Exceeds request.Или иногда я терял соединение и т. Д.

Затем я должен снова запустить свою программу, и я потеряю свой построенный график, а также время, когда моя программа была отключена, и данные, которые я потерял за это время.Поэтому мне нравится добавлять что-то в мою программу, чтобы сохранить соединение от прерываний / отключений.Я имею в виду, что моя программа не остановится, если она потеряла соединение или будет отклонена со стороны сервера, и сохранит свою работу, когда она снова подключится.

Как это возможно?

РЕДАКТИРОВАТЬ: Я редактировал мойкод вроде следующего, но не знаете, насколько это хорошо?

    try:
       for i in range(25200):

           time.sleep(1)
           with requests.Session() as s:
                      data = {'ContractCode' : 'SAFMO98' }
                      r =s.post('http://cdn.ime.co.ir/Services/Fut_Live_Loc_Service.asmx/GetContractInfo', json = data ).json()

           for key, value in r.items():
               plt.clf()
               last_prices = (r[key]['LastTradedPrice'])   
               z.append(last_prices)
               plt.figure(1)
               plt.plot(z)

    except:
        pass

1 Ответ

1 голос
/ 24 июня 2019

У вас есть как минимум два события сбоя подключения, и любое из них может привести к невозможности подключения в течение неопределенного периода времени.Хорошим вариантом здесь является экспоненциальный откат .

По сути, вы пытаетесь выполнить операцию, обнаружите известные вам сбои, потребуется повторная попытка и ждете.При каждом последующем сбое операции (в этом случае, по-видимому, вызывая исключение) вы ожидаете значение, кратное предыдущему времени ожидания.Идея состоит в том, что если вы ограничены в скорости, вы будете ждать дольше и дольше, пока API, к которому вы подключаетесь, не прекратит отклонять ваши запросы.Кроме того, если вы физически отключены, вы будете пытаться меньше подключаться с течением времени, а не рассылать спам-запросы на неисправном адаптере.

Есть библиотека Python, backoff, котораявыполняет большую часть работы, выполняемой для вас, с помощью декоратора.

...