python设置检查点简单实现代码_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 

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索python
检查点
python实现简单爬虫、svm python 代码实现、python简单爬虫代码、python简单代码、几段简单的python代码,以便于您获取更多的相关知识。

时间: 2024-09-19 09:04:07

python设置检查点简单实现代码_python的相关文章

为python设置socket代理的方法_python

首先,你得下载SocksiPy这个.解压出来之后里面会有一个socks.py文件.然后你可以把这个文件复制到python安装目录里面的Lib\site-packages中.或者把这个文件复制到程序所在的目录中. 然后就可以再程序中使用socket代理来编写程序了. 下面是示例代码 import socks import socket socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1",8088) socket.socket

Python操作MySQL简单实现方法_python

本文实例讲述了Python操作MySQL简单实现方法.分享给大家供大家参考.具体分析如下: 一.安装: 安装MySQL 安装MySQL不用多说了,下载下来安装就是,没有特别需要注意的地方. 一个下载地址:点击打开链接 二.示例: 复制代码 代码如下: # coding=utf-8 import MySQLdb   #查询数量 def Count(cur):    count=cur.execute('select * from Student')    print 'there has %s r

python解析xml模块封装代码_python

有如下的xml文件: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?>  <root>  <childs>  <child name='first' >1</child>  <child value="2">2</child>  </childs>  </root> 下面介绍python解

python网页请求urllib2模块简单封装代码_python

对python网页请求模块urllib2进行简单的封装. 例子: 复制代码 代码如下: #!/usr/bin/python#coding: utf-8import base64import urllibimport urllib2import time class SendRequest:  '''  This class use to set and request the http, and get the info of response.  e.g. set Authorization

使用 Python 获取 Linux 系统信息的代码_python

哪个Python版本? 当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3 (3.3)上是不工作的,以及提供一份解释不同之处的备选代码.请确保你已经安装了CPython,在终端上输入python或者python3回车,然后你在终端上应该能看到python的提示符(prompt). 请注意,所有的程序在它们第一行都是#!/usr/bin/env/python,也就是说,我们想要Python的解释器来执行这些脚本.因此,如果你想你的脚

利用Python开发实现简单的记事本_python

前言 本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能. 示例图 如上图,我们可以看到这个记事本主要分为三个模块:文件,编辑和关于,结合我自身的习惯外加四个toolbar:新建.打开.撤销和保存. 下来就我个人构建这个记事本做个总结. 一.整体框架构建 1.三个主模块的建立 首先,我们先建立上图中的三个主模块,同时,在模块中建立各个模块的功能.先以文件为例:下设功能:新建.打开.保存和另存为,代码如下: #-*-encoding

一则python3的简单爬虫代码_python

不得不说python的上手非常简单.在网上找了一下,大都是python2的帖子,于是随手写了个python3的.代码非常简单就不解释了,直接贴代码. 复制代码 代码如下: #test rdpimport urllib.requestimport re<br>#登录用的帐户信息data={}data['fromUrl']=''data['fromUrlTemp']=''data['loginId']='12345'data['password']='12345'user_agent='Mozil

使用C语言扩展Python程序的简单入门指引_python

一.简介 Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已经开始受到越来越多人的青睐,并且被屡屡成功地应用于各类大型软件系统的开发过程中. 与其它普通脚本语言有所不同,Python程序员可以借助Python语言提供的API,使用C或者C++来对Python进行功能性扩展,从而即可以利用Python方便灵活的语法和功能,又可以获得与C或者C++几乎相同的执行性能.执行速度慢是几乎所有脚本语言都具有的共性,也是倍受人

python选择排序算法的实现代码_python

1.算法:对于一组关键字{K1,K2,-,Kn}, 首先从K1,K2,-,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换:然后从K2,K3,- ,Kn中选择最小值 Kz,再将Kz与K2对换.如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1.Kn中选择最小值 Kz将Kz与Kn-1对换,最后剩下的就是该序列中的最大值,一个由小到大的有序序列就这样形成. 2.python 选择排序代码: 复制代码 代码如下: def selection_sort(list2):    for i in