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之集成开发环境(IDE)
Sep 12 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
Pycharm学习教程(1) 定制外观
May 02 Python
深入理解Python中的内置常量
May 20 Python
python Pandas 读取txt表格的实例
Apr 29 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
Python 导入文件过程图解
Oct 15 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
python实现电子词典
Mar 03 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 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
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
js 中 document.createEvent的用法
2010/08/29 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
公司面试感谢信
2014/02/01 职场文书
2014年医院工作总结
2014/11/20 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
导游词之无锡梅园
2019/11/28 职场文书
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers