From b078c8fbf92a4f1c39b7de2796ab1f738454bdb4 Mon Sep 17 00:00:00 2001 From: MarkusJoe Date: Sat, 3 Sep 2022 08:01:26 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E6=B7=BB=E5=8A=A0=E5=A4=9A=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/__init__.py | 3 +++ src/utils/t_download.py | 51 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/utils/t_download.py diff --git a/src/utils/__init__.py b/src/utils/__init__.py index 54967fd..971778b 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -7,3 +7,6 @@ from src.utils.response import resp +from src.utils.t_download import download + +__all__ = [resp, download] diff --git a/src/utils/t_download.py b/src/utils/t_download.py new file mode 100644 index 0000000..361d34f --- /dev/null +++ b/src/utils/t_download.py @@ -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 + +