python 断点续传 (个人理解)

简介:
参考:
http://pycurl.sourceforge.net/doc/pycurl.html
如果想多线程下载,请关注下面url
   http://groups.google.com/group/python-cn/msg/cdbe671b814fd3af
http://www.pythonclub.org/doku/index.php/python-network-application/pycurl
(个人粗略认为)原理:
     把服务器上的文件分n“等份”,再在准备下载地址按等分一一填充到文件中。
     当 下载 “等份数据” 时如果未能正常结束,从头下载次等份数据。正常结束后线程下载下一等分。
   好比:
   服务器文件(x):  1111111
   待填充文件(y): 0000000
   运行1:(2分钟)
     文件(x):0101001  
   接着运行2:(1分钟,断点续传)
   文件(x):1111001
   最后:文件(x):1111111
需要技术:
    1.按切割下载
    2.本地创造与服务器文件一样大小空文件。
    2.等份写入
 技术1代码(按切割下载).
c.setopt(pycurl.RANGE, '%d-%d' % (5001000))
import  pycurl
=  pycurl.Curl()
c.setopt(pycurl.URL, 
" http://www.python.org/ " )
c.setopt(pycurl.HTTPHEADER, [
" Accept: " ])
import  StringIO
=  StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.FOLLOWLOCATION, 
1 )
c.setopt(pycurl.MAXREDIRS, 
5 )
c.setopt(pycurl.RANGE, 
' %d-%d '   %  ( 500 1000 ))
c.perform()
print  b.getvalue()
技术2(本地创造与服务器文件一样大小空文件)
     def  allocate_space(self):
        
'''
        预分配文件空间(通用?)
        
'''
        afile 
=  file(self.url_info[ ' file ' ],  ' wb ' )
        afile.truncate(self.url_info[
' size ' ])#文件大小限定
        afile.close()
技术3(等份写入 file. seek ):  
     # ----关键----
     def  write_cb(self, data):
        
if  self.piece:
            self.result.seek(self.piece[
1 +  self.piece_downloaded, 0)
        self.result.write(data)
        self.result.flush()
        size 
=  len(data)
        self.link_downloaded 
+=  size
        self.piece_downloaded 
+=  size
        self.total_downloaded 
+=  size
        
if  self.is_stop:  return   - 1
pycurl 学习笔记:
$ftp读取
import  pycurl
tfile
= ' ftp://name:pass@218.200.***.***/tongbu/test.txt '
=  pycurl.Curl()
c.setopt(pycurl.URL, tfile)
import  StringIO
=  StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.FOLLOWLOCATION, 
1 )
c.setopt(pycurl.MAXREDIRS, 
5 )
# c.setopt(pycurl.RANGE, '%d-%d' % (2, 6))
c.perform()
print  b.getvalue()
下载写入:
     bean_ pycurl=pycurl.Curl()
    ...
    
    bean_
pycurl .setopt(pycurl.WRITEFUNCTION, write_cb)
    ...

    
def  write_cb(data):
        file.write(data)
        ..
本文转自博客园刘凯毅的博客,原文链接:python 断点续传 (个人理解),如需转载请自行联系原博主。


   



目录
相关文章
|
15天前
|
人工智能 开发者 Python
Python 中的断点类型详解
Python 中的断点类型详解
19 2
|
数据采集 Shell 开发工具
[oeasy]python0009 - 设置断点_break_point
[oeasy]python0009 - 设置断点_break_point
77 0
[oeasy]python0009 - 设置断点_break_point
|
16天前
|
存储 人工智能 数据处理
Python:编程的艺术与科学的完美交融
Python:编程的艺术与科学的完美交融
19 1
|
2天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
14 5
|
5天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
|
6天前
|
测试技术 Python
Python模块化方式编程实践
Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
27 2
|
11天前
|
测试技术 调度 索引
python编程中常见的问题
【4月更文挑战第23天】
32 2
|
12天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver
|
12天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
12天前
|
机器学习/深度学习 数据挖掘 算法框架/工具
Python:编程的艺术与魅力
Python:编程的艺术与魅力
25 3