python設定チェックポイント単純実装コード

2890 ワード

チェックポイントといえば、実は過去の歴史の記録であり、logと考えられる.ここでは簡略化する.例えば、私は今またテキストを書きます.テキストにはリンク先が山積みになっている.私の今の任務はそれらのアドレスの内容をダウンロードすることです.また、インターネットの問題やウェブサイトの問題で、ダウンロードするたびに非常に成功しない可能性があります.チェーン切断またはsocket異常エラーが発生する可能性があります.しかし、どんな間違いがあっても、私のプログラムがずっと走っていくことを望んでいます.あるいは止めて、ダウンロードのためのリンクから走り続けることができます.最初の場所から走るのではなく.この問題はとても簡単です.これらのリンクはコンテキストに関係ないので(コンテキストに関係する場合は別途分析します).だから私はプログラムの実行が停止する前の最後の1本を記録すれば、前の仕事を続けることができることを望んでいます.ここで実装では既存のリンクを記録するために用いられ,カウンタの方法で記録することもできる.コードは次のとおりです.

#                           
class CheckPointMissContentError: 
  pass 
#        fd              
# check point     ,          ,     ,           
#     check_point 。        ,            。  
def GoCheckPoint(fd,check_point): 
  if not os.path.isfile(check_point): 
    f_check = open(check_point,'w') 
    f_check.close() 
  f_check = open(check_point,'r') 
  lines = f_check.readlines() 
  if len(lines) > 0: 
    check_content = lines[-1] #           
    check_content = check_content.strip(' /n/r') 
    # go to check point  
    while True: 
      content = fd.readline() 
      if content == '': # eof  
        raise CheckPointMissContentError 
      if content.strip(' /n/r') == check_content: 
        break 
         
  f_check.close()#      

上の段落があっても足りないので、次のコードの補充が必要です.

#      
def Download(downloadlist,sleep_time): 
   
  if os.path.isfile(downloadlist): 
    f = open(downloadlist) 
    # check_point file name,                
    check_point = file[0:file.rfind('.')]+'_check.txt' 
    Util.GoCheckPoint(f,check_point) #         GoCheckPoint    
    f_check = open(check_point,'a')#          
     
    try: 
      while True: 
        content = f.readline() 
        if content == '': # eof  
          break 
        content = content.strip(' /n/r') 
        if content != '': 
          # has download url  
          time.sleep(sleep_time) 
          DownloadOper(path,url) #      ..     urllib.request.retrieve()     urllib.request.urlopen()    
        #                      
          f_check.write(content+'/n') 
          f_check.flush() #    ,     ,         
    except : #        ,     F5      
      raise Exception() 
      return Util.FAILURE #         ,     0  1      
    finally: 
      f.close() 
      f_check.close()#       
    print('Downloading is done........................') 
    return Util.SUCCESS 

操作が完了したら、チェックポイントファイルに書き込みます.後でプログラムを切って、ファイルがまだあることをチェックすれば、前の仕事を続けることができます.しかし、ここのチェックポイントは、データベース内のトランザクションのチェックポイントに比べて簡単すぎます.