python设置检查点简单实现代码

说检查点,其实就是对过去历史的记录,可以认为是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 

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

(0)

相关推荐

  • Python中实现参数类型检查的简单方法

    Python是一门弱类型语言,很多从C/C++转过来的朋友起初不是很适应.比如,在声明一个函数时,不能指定参数的类型.用C做类比,那就是所有参数都是void*类型!void类型强制转换在C++中被广泛地认为是个坏习惯,不到万不得已是不会使用的. Python自然没有类型强制转换一说了,因为它是动态语言.首先,所有对象都从Object继承而来,其次,它有强大的内省,如果调用某个不存在的方法会有异常抛出.大多数情况,我们都不需要做参数类型栓查,除了一些特殊情况.例如,某个函数接受一个str类型,结果

  • python定时检查某个进程是否已经关闭的方法

    本文实例讲述了python定时检查某个进程是否已经关闭的方法.分享给大家供大家参考.具体如下: import threading import time import os import subprocess def get_process_count(imagename): p = os.popen('tasklist /FI "IMAGENAME eq %s"' % imagename) return p.read().count(imagename) def timer_star

  • python代码检查工具pylint 让你的python更规范

    1.pylint是什么? Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码.目前 Pylint 的最新版本是 pylint-0.18.1. Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等. Pylint 的一个很大的好

  • 利用python批量检查网站的可用性

    前言 随着站点的增多,管理复杂性也上来了,俗话说:人多了不好带,我发现站点多了也不好管,因为这些站点里有重要的也有不重要的,重要核心的站点当然就管理的多一些,像一些万年都不出一次问题的,慢慢就被自己都淡忘了,冷不丁那天出个问题,还的手忙脚乱的去紧急处理,所以规范的去管理这些站点是很有必要的,今天我们就做第一步,不管大站小站,先统一把监控做起来,先不说业务情况,最起码那个站点不能访问了,要第一时间报出来,别等着业务方给你反馈,就显得我们不够专业了,那接下来我们看看如果用python实现多网站的可用

  • PHP webshell检查工具 python实现代码

    1.使用方法:find.py 目录名称 2. 主要是采用python正则表达式来匹配的,可以在keywords中添加自己定义的正则,格式: ["eval\(\$\_POST","发现PHP一句话木马!"] #前面为正则,后面为对这个正则的描述,会在日志中显示. 3.修改下文件后缀和关键字的正则表达式就可以成为其他语言的webshell检查工具了,^_^. 4.开发环境是windows xp+ActivePython 2.6.2.2,家里电脑没有Linux环境,懒得装

  • python通过装饰器检查函数参数数据类型的方法

    本文实例讲述了python通过装饰器检查函数参数数据类型的方法.分享给大家供大家参考.具体分析如下: 这段代码定义了一个python装饰器,通过此装饰器可以用来检查指定函数的参数是否是指定的类型,在定义函数时加入此装饰器可以非常清晰的检测函数参数的类型,非常方便 复制代码 代码如下: def accepts(exception,**types):     def check_accepts(f):         assert len(types) == f.func_code.co_argco

  • 使用python检测主机存活端口及检查存活主机

    监测主机存活的端口 #!/usr/bin/env python # coding-utf import argparse import socket import sys #author: wolf_ribble def scan_ports(host,start_port,end_port): """Scan remote hosts""" try: sock = socket.socket(socket.AF_INET, socket.SOC

  • Python实现单词拼写检查

    这几天在翻旧代码时发现以前写的注释部分有很多单词拼写错误,这些单词错得不算离谱,应该可以用工具自动纠错绝大部分.用 Python 写个拼写检查脚本很容易,如果能很好利用 aspell/ispell 这些现成的小工具就更简单了. 要点 1.输入一个拼写错误的单词,调用 aspell -a 后得到一些候选正确单词,然后用距离编辑进一步嗮选出更精确的词.比如运行 aspell -a,输入 'hella' 后得到如下结果: hell, Helli, hello, heal, Heall, he'll,

  • python定时检查启动某个exe程序适合检测exe是否挂了

    详见代码如下: 复制代码 代码如下: import threading import time import os import subprocess def get_process_count(imagename): p = os.popen('tasklist /FI "IMAGENAME eq %s"' % imagename) return p.read().count(imagename) def timer_start(): t = threading.Timer(120,

  • Python 检查数组元素是否存在类似PHP isset()方法

    PHP中有isset方法来检查数组元素是否存在,在Python中无对应函数. Python的编程理念是"包容错误"而不是"严格检查".举例如下: 复制代码 代码如下: Look before you leap (LBYL): if idx < len(array): array[idx] else: #handle this Easier to ask forgiveness than permission (EAFP): try: array[idx] ex

随机推荐