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