树莓派俱乐部 树莓派俱乐部
  • 首页
  • 树莓派
  • OpenWrt
  • Python
  • Linux
  • 注册
    登录
现在登录。
  • 首页
  • 树莓派
  • OpenWrt
  • Python
  • Linux
首页 Python Python 实现多线程分块下载

Python 实现多线程分块下载

束发少年 4年 前

有时候需要使用Python下载一个比较大的文件,我们利用Python的多线程Threading来完成,然后根据文件大小分配线程和每个线程的文件大小。

def Handler(start, end, url, filename):
    headers = {'Range': 'bytes=%d-%d' % (start, end)}
    with requests.get(url, headers=headers,stream=True) as r:
        with open(filename, "r+b") as fp:
            fp.seek(start)
            var = fp.tell()
            fp.write(r.content)
def download(url,tittle, num_thread = 10):
    r = requests.head(url)
    try:
        file_name = tittle
        file_size = int(r.headers['content-length'])
    except:
        print("检查URL,或不支持对线程下载")
        return
    fp = open(file_name, "wb")
    fp.truncate(file_size)
    fp.close()
    part = file_size // num_thread
    for i in range(num_thread):
        start = part * i
        if i == num_thread - 1:
            end = file_size
        else:
            end = start + part
        t = threading.Thread(target=Handler, kwargs={'start': start, 'end': end, 'url': url, 'filename': file_name})
        t.setDaemon(True)
        t.start()
 
# 等待所有线程下载完成
main_thread = threading.current_thread()
for t in threading.enumerate():
    if t is main_thread:
        continue
    t.join()
print('%s 下载完成' % file_name)
#Python#Threading
2
束发少年
用自己的眼睛去读世间这一部书。
评论 (0)
返回
    发表评论
猜你喜欢
  • Python3下WordPress 数据库发布文章的类
  • 用Python统计大文件内容行数
束发少年
28
文章
7
评论
86
获赞
文章聚合
如何在Raspberry Pi上安装 Minecraft Server
3年 前
树莓派俱乐部官方 Debian 系统镜像 支持UEFI
3年 前
将您的树莓派4超频至2.0GHz
4年 前
在windows上运行osmc和最新raspbian
3年 前
64位ububtu+64位openwrt双系统镜像发布
4年 前
  • 首页
Copyright © 2018-2023 树莓派俱乐部. Designed by nicetheme.