国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python設置檢查點簡單實現代碼

2019-11-25 18:21:26
字體:
來源:轉載
供稿:網友

說檢查點,其實就是對過去歷史的記錄,可以認為是log.不過這里進行了簡化.舉例來說,我現在又一段文本.文本里放有一堆堆的鏈接地址.我現在的任務是下載那些地址中的內容.另外因為網絡的問題或者網站的問題,每次下載可能不會非常的成功.有可能出現斷鏈或者socket異常錯誤。不過不管產生什么樣的錯誤,我都希望我的程序能夠一直跑下去。或者能停掉后,繼續從為下載的鏈接處跑。而不是從開始的地方跑。這個問題非常簡單。因為這些鏈接是上下文無關的(上下文有關的情況要另外分析)。所以我只要記錄程序運行停止前的最后一條,就有希望能夠延續前面的工作。這里實現中使用的是記錄原有的鏈接,大家也可以使用計數器的方法來記錄。代碼如下:

# 這個異常是原文本內容中未出現檢查點內容出現造成的  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 

執行完操作之后再寫入到檢查點文件中。以后程序掛掉,只要檢查點文件還在,就可以延續前面的工作。不過這里的檢查點相對于數據庫中事務處理的檢查點還是太簡單了點。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郁南县| 靖宇县| 萨迦县| 天柱县| 竹溪县| 勐海县| 黄山市| 岳阳市| 彭山县| 丹棱县| 沾化县| 诸城市| 盱眙县| 秦安县| 延庆县| 荥经县| 顺义区| 遂溪县| 新化县| 县级市| 丹江口市| 神农架林区| 宜宾县| 买车| 九江县| 白城市| 永新县| 固始县| 岗巴县| 金秀| 凤凰县| 镶黄旗| 九台市| 资讯 | 海晏县| 新沂市| 堆龙德庆县| 连平县| 青海省| 蓬安县| 大城县|