Python internet断开连接后如何继续我的程序?

Python internet断开连接后如何继续我的程序?,python,request,connection,Python,Request,Connection,我有一个这样的程序: 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 = dat

我有一个这样的程序:

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)
有时服务器会拒绝连接并发出请求消息。或者有时我失去了联系,等等

然后我必须重新运行我的程序,我将失去我绘制的图表,以及我的程序断开连接的时间和我丢失的数据。所以我想做的是在我的程序中添加一些东西,以保持我的连接不受中断/断开的影响。我的意思是,当我的程序失去连接或被服务器端拒绝时,它不会停止,当它再次连接时,它会继续工作

怎么可能呢

编辑:我像下面那样编辑了我的代码,但不知道这种方式有多好

    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

这里至少有两个连接失败事件,其中任何一个都可能导致无法连接未定义的时间。这里有一个很好的选择

基本上,您可以尝试一个操作,检测到需要重试的故障,然后等待。在这种情况下,每次后续操作失败(可能会引发异常),您都会等待上一次等待时间的倍数。这个想法是,如果您受到速率限制,您将等待越来越长的时间,直到您连接的API停止拒绝您的请求。此外,如果您的物理连接已断开,那么随着时间的推移,您将尝试更少的连接,而不是在死掉的适配器上滥发请求


有一个Python库,它通过一个装饰器为您处理这项工作中涉及的大部分工作。

@KlausD.,谢谢,但是除了部分,我应该写什么?@KlausD.:我想做的是,除了告诉我的程序跳入尝试部分并重试的部分,我应该写什么?你的try/except块需要在循环中,否则会捕获一个异常,但它会跳出循环。我也不清楚你想要实现什么。您的循环将运行7小时25200秒,但请求需要时间,因此,如果您正确处理了异常,那么它将运行至少7小时,请求大约每隔一两秒发生一次,网络变化很大,特别是如果你要实施退避——你应该这么做——就像我在回答中建议的那样。