zoukankan      html  css  js  c++  java
  • python设置检查点简单实现

    说检查点,其实就是对过去历史的记录,可以认为是log.不过这里进行了简化.举例来说,我现在又一段文本.文本里放有一堆堆的链接地址.我现在的任务是下载那些地址
    中的内容.另外因为网络的问题或者网站的问题,每次下载可能不会非常的成功.有可能出现断链或者socket异常错误。不过不管产生什么样的错误,我都希望我的程序能
    够一直跑下去。或者能停掉后,继续从为下载的链接处跑。而不是从开始的地方跑。这个问题非常简单。因为这些链接是上下文无关的(上下文有关的情况要另外分析)。所以我
    只要记录程序运行停止前的最后一条,就有希望能够延续前面的工作。这里实现中使用的是记录原有的链接,大家也可以使用计数器的方法来记录。代码如下:

    将文件读取指针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()#关闭检查点

    有了上面一段还是不够的 大专栏  python设置检查点简单实现,需要下面的代码补充:

    伪代码 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

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

  • 相关阅读:
    [JavaScript] 数组去重
    [JavaScript] console.log只在查看时才会读取这个打印的对象,并把此刻相关属性和值显示出来
    [Vuejs] 点击单选框触发两次点击事件的处理
    [Vuejs] 给ref赋值需要注意的问题
    [Vuejs] Vue解决代理设置导致浏览器Session丢失的问题
    [Vuejs] 在vue各个组件中应用全局scss变量
    [JavaScript] 跳出循环方法总结
    [JavaScript] 根据指定宽度截取字符串
    [Element-UI] 使用Element-UI的DateTimePicker组件报错:Cannot read property 'getHours' of undefined
    [Vuejs] 组件 v-if 和 v-show 切换时生命周期钩子的执行
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12286148.html
Copyright © 2011-2022 走看看