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中计算三角函数之cos()方法的使用简介
May 15 Python
Python字符串处理之count()方法的使用
May 18 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
详解Python3的TFTP文件传输
Jun 26 Python
python提取包含关键字的整行数据方法
Dec 11 Python
pytorch+lstm实现的pos示例
Jan 14 Python
Python实现括号匹配方法详解
Feb 10 Python
postman和python mock测试过程图解
Feb 22 Python
python 常见的排序算法实现汇总
Aug 21 Python
python中的测试框架
Nov 13 Python
python中%格式表达式实例用法
Jun 18 Python
pandas中对文本类型数据的处理小结
Nov 01 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
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
php7下的filesize函数
2019/09/30 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
微信小程序 如何获取网络状态
2019/07/26 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
详解python读取和输出到txt
2019/03/29 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
Python使用configparser库读取配置文件
2020/02/22 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
2015中秋节慰问信范文
2015/03/23 职场文书
2015年加油站工作总结
2015/05/13 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL