update: 添加多线程下载

This commit is contained in:
MarkusJoe
2022-09-03 08:01:26 +08:00
parent 159c05bf65
commit b078c8fbf9
2 files changed
+54

No files matched your search

+3
View File
@@ -7,3 +7,6 @@
from src.utils.response import resp
from src.utils.t_download import download
__all__ = [resp, download]
+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env python3
# -- coding:utf-8 --
# @Author: markushammered@gmail.com
# @Development Tool: PyCharm
# @Create Time: 2022/9/3
# @File Name: t_download.py
import threading
import requests
class ThreadedDownload(threading.Thread):
def __init__(self,
url: str,
filename: str,
thread_id: int,
start_seek: int,
end_seek: int,
offset: int
):
super().__init__()
self.url = url
self.filename = filename
self.thread_id = thread_id
self.start_seek = start_seek
self.end_seek = end_seek
self.offset = offset
def download(self):
resp = requests.get(self.url, headers={'Range': f'Bytes={self.start_seek}-{self.end_seek}'})
with open('./src/db/data.sqlite', 'rb+') as fp:
fp.seek(self.start_seek)
fp.write(resp.content)
def run(self) -> None:
self.download()
def download(url: str, threads: int = 4) -> None:
filename = url.split('/')[-1]
open('./src/db/data.sqlite', 'wb').close() # create an empty file
filesize = int(requests.head(url).headers['Content-Length'])
offset = filesize // threads
start = 0
for i in range(threads):
end = offset + start
ThreadedDownload(url, filename, i, start, end, offset).run()
start = end