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 相关文章推荐
教你用python3根据关键词爬取百度百科的内容
Aug 18 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
Numpy中转置transpose、T和swapaxes的实例讲解
Apr 17 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
基于h5py的使用及数据封装代码
Dec 26 Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
Python函数调用追踪实现代码
Nov 27 Python
安装pytorch时报sslerror错误的解决方案
May 17 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
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
Node.js中对通用模块的封装方法
2014/06/06 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
Python实现的最近最少使用算法
2015/07/10 Python
Python在线运行代码助手
2016/07/15 Python
Python连接phoenix的方法示例
2017/09/29 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
深入理解Python 多线程
2020/06/16 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
暑期实习鉴定
2013/12/16 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
给领导的感谢信范文
2015/01/23 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL