Python 通过urllib进行多线程下载

本文介绍了使用Python的urllib库进行多线程文件下载的方法,重点讲解了HTTP的Range和Content-Length头信息,以及如何结合threading.Thread实现下载过程。通过设置缓存大小和线程数量,可以有效地利用内存并加速下载。
摘要由CSDN通过智能技术生成

Python多线程下载

  1. http: range, content-length
  2. python实现

HTTP Range, Content-Length:

Content-Length: 1394829

HTTP头Content-Length用于描述HTTP消息实体的传输长度

Range: bytes=0-1

HTTP头信息Range用于请求服务器返回文件的某个字段,不过在大部分情况请求页面文件不会返回该页面文件的字段,而是返回全部。
(0-1表示的是前两个字节)

实现

import os, sys
from urllib.request import *
from threading import Thread

urllib.request为我们提供访问该页面的方法。
threading.Thread为我们创建多线程。

url = "" #下载文件链接
threadnum = 5 #开启线程数
savepath = "" #文件保存地址
cachesize = 4096 #缓存大小

threadpool = [] #线程池

定义变量,缓存大小单位为字节,指储存在内存中(未写入文件)的大小。开5个线程就需要4096*5字节大小的内存。

def download(startpos, endpos, _id):
	if _id == threadnum-1:
		#是最后一个线程,下载完剩余的全部
		endpos = filesize
	
	download_size = endpos-startpos #总下载大小
	download_num = download_size // cachesize #需要下载次数
	#end_download_size = 0 if download_num*cachesize == download_size else download_size - download_num*cachesize #最后一次读取的大小,如果为0则代表总下载大小整除缓存数 (方便理解)
	end_download_size = download_size % cachesize
	#请求访问文件
	reqfile = Request(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值