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 断点续传 (个人理解),如需转载请自行联系原博主。


   



目录
相关文章
|
3月前
|
程序员 开发工具 Python
[oeasy]python0030_动态控制断点_breakpoints_debug_调试
[oeasy]python0030_动态控制断点_breakpoints_debug_调试
33 2
|
3月前
|
程序员 Shell 开发工具
[oeasy]python029_ until_直接跳转到_unt_breakpoint_断点函数
回顾早期计算机操作员多为女性,她们甚至发明了“bug”这个词。为了体验调试过程,我们故意在Python脚本中引入了一个拼写错误,并通过直接运行程序遇到了`NameError`。 通过`until`命令,我们可以快速跳转到指定行执行,这对于大型项目非常有用。此外,`continue`(或简写`c`)命令则会一直执行到下一个断点或程序结束。我们还可以在代码中使用`breakpoint()`设置断点,配合`continue`命令使用,实现快速跳转至特定位置进行调试。 这些技巧使调试过程变得高效且有趣,如同解开谜题一般。下次我们将探讨如何在调试过程中动态设置与取消断点。
30 0
|
6月前
|
人工智能 开发者 Python
Python 中的断点类型详解
Python 中的断点类型详解
55 2
|
数据采集 Shell 开发工具
[oeasy]python0009 - 设置断点_break_point
[oeasy]python0009 - 设置断点_break_point
96 0
[oeasy]python0009 - 设置断点_break_point
|
7天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
1天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
6天前
|
弹性计算 安全 小程序
编程之美:Python让你领略浪漫星空下的流星雨奇观
这段代码使用 Python 的 `turtle` 库实现了一个流星雨动画。程序通过创建 `Meteor` 类来生成具有随机属性的流星,包括大小、颜色、位置和速度。在无限循环中,流星不断移动并重新绘制,营造出流星雨的效果。环境需求为 Python 3.11.4 和 PyCharm 2023.2.5。
26 9
|
2天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第24天】本文将带你进入Python的世界,从最基础的语法开始,逐步深入到实际的项目应用。我们将一起探索Python的强大功能和灵活性,无论你是编程新手还是有经验的开发者,都能在这篇文章中找到有价值的内容。让我们一起开启Python的奇妙之旅吧!
|
3天前
|
设计模式 监控 数据库连接
Python编程中的设计模式之美:提升代码质量与可维护性####
【10月更文挑战第21天】 一段简短而富有启发性的开头,引出文章的核心价值所在。 在编程的世界里,设计模式如同建筑师手中的蓝图,为软件的设计和实现提供了一套经过验证的解决方案。本文将深入浅出地探讨Python编程中几种常见的设计模式,通过实例展示它们如何帮助我们构建更加灵活、可扩展且易于维护的代码。 ####
|
1天前
|
数据库 开发者 Python
“Python异步编程革命:如何从编程新手蜕变为并发大师,掌握未来技术的制胜法宝”
【10月更文挑战第25天】介绍了Python异步编程的基础和高级技巧。文章从同步与异步编程的区别入手,逐步讲解了如何使用`asyncio`库和`async`/`await`关键字进行异步编程。通过对比传统多线程,展示了异步编程在I/O密集型任务中的优势,并提供了最佳实践建议。
7 1