python设置检查点简单实现代码


Posted in Python onJuly 01, 2014

说检查点,其实就是对过去历史的记录,可以认为是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

执行完操作之后再写入到检查点文件中。以后程序挂掉,只要检查点文件还在,就可以延续前面的工作。不过这里的检查点相对于数据库中事务处理的检查点还是太简单了点。

Python 相关文章推荐
python网络编程学习笔记(一)
Jun 09 Python
python爬虫入门教程之糗百图片爬虫代码分享
Sep 02 Python
python实现数据图表
Jul 29 Python
Python探索之Metaclass初步了解
Oct 28 Python
详解Python locals()的陷阱
Mar 26 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Python调用jar包方法实现过程解析
Aug 11 Python
PyTorch安装与基本使用详解
Aug 31 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 Python
如何搜索查找并解决Django相关的问题
Jun 30 #Python
python字典多条件排序方法实例
Jun 30 #Python
python实现的解析crontab配置文件代码
Jun 30 #Python
全面解读Python Web开发框架Django
Jun 30 #Python
Python科学计算环境推荐——Anaconda
Jun 30 #Python
9种python web 程序的部署方式小结
Jun 30 #Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 #Python
You might like
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Python OpenCV实现视频分帧
2019/06/01 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
pytorch 求网络模型参数实例
2019/12/30 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
linux面试题参考答案(7)
2012/10/29 面试题
大学生自我鉴定
2013/12/16 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
职工运动会邀请函
2014/02/02 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
一年级评语大全
2014/04/23 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android