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 相关文章推荐
在Django的form中使用CSS进行设计的方法
Jul 18 Python
python实现发送邮件及附件功能
Mar 02 Python
Python信息抽取之乱码解决办法
Jun 29 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
python pandas中DataFrame类型数据操作函数的方法
Apr 08 Python
解决win64 Python下安装PIL出错问题(图解)
Sep 03 Python
详解用python写一个抽奖程序
May 10 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
Python中格式化字符串的四种实现
May 26 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 Python
Python Matplotlib绘制两个Y轴图像
Apr 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
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php微信开发之谷歌测距
2018/06/14 PHP
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
python中selenium库的基本使用详解
2020/07/31 Python
Python requests接口测试实现代码
2020/09/08 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
自我鉴定模板
2013/10/29 职场文书
学生自我鉴定
2013/12/18 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
班级口号大全
2014/06/09 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python