From 8b07e25b88879645113276725578e83372ff9b3a Mon Sep 17 00:00:00 2001 From: MarkusJoe Date: Sun, 20 Mar 2022 13:32:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=9C=B0=E5=9D=80=E5=B9=B6=E4=B8=94=E5=B0=86?= =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=E4=B8=8B=E8=BD=BD=E6=9B=B4=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8D=95=E7=BA=BF=E7=A8=8B=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/__init__.py | 90 ++----------------------------------------------- 1 file changed, 3 insertions(+), 87 deletions(-) diff --git a/bin/__init__.py b/bin/__init__.py index e3cf968..ad30f51 100644 --- a/bin/__init__.py +++ b/bin/__init__.py @@ -7,60 +7,14 @@ import os -import sys import time import requests -import threading from bin.utils.logger import logger -class MultiThreaded(threading.Thread): - def __init__(self, - start_: int, - end_: int, - id_: int, - url: str, - name: str - ) -> None: - """ - 初始化类 - :param start_: 开始点 - :param end_: 结束点 - :param id_: 线程id - :param url: 文件url - :param name: 文件名 - """ - super(MultiThreaded, self).__init__() - self.start_ = start_ - self.end_ = end_ - self.id = id_ - self.url = url - self.name = name - - def download(self): - """ - 下载文件 - 写入文件 - :return: - """ - logger.info(f'线程: {self.id} 开始下载') - res = requests.get(self.url, headers={'Range': f'Bytes={self.start_}-{self.end_}'}, timeout=10).content - with open(self.name, 'r+b') as fp: - fp.seek(self.start_) - fp.write(res) - logger.info(f'线程: {self.id} 结束下载') - - def run(self): - """ - 重写run()方法开始下载 - :return: - """ - self.download() - - def cost(func): def wrapper(*args, **kwargs): - logger.info('文件开始开始下载') + logger.info('开始下载') s = time.time() execute = func(*args, **kwargs) e = time.time() @@ -70,38 +24,6 @@ def cost(func): return wrapper -@cost -def main(url: str, name: str, path: str = '.', workers: int = 8): - """ - 主函数 - :param url: - :param name: - :param path: - :param workers: - :return: - """ - logger.info(f'本次下载使用线程数: {workers}') - file_size = int(requests.get(url, timeout=10).headers['Content-Length']) - if requests.get(url, timeout=10).status_code == 302: - url = requests.get(url).headers['Location'] - logger.warning(f'下载地址已重定向到了: {url}') - logger.info(f'文件大小: {round(file_size / 1024 / 1024, 2)} Mb') - offset = int(file_size / workers) - start = 0 - open(path + name, 'wb').close() - for i in range(workers): - if i == workers - 1: - end = file_size - elif i != 0: - end = i * offset - else: - end = offset - threads = MultiThreaded(start, end, i, url, path + name) - threads.start() - threads.join() - start = end + 1 - - @cost def download(url: str) -> None: """ @@ -118,12 +40,6 @@ if __name__ != '__main__': if not os.path.exists('./bin/db/data.db'): logger.warning('数据库文件不存在, 即将开始下载') try: - main('https://filebase.vercel.app/download/data.db', 'data.db', './bin/db/') + download('https://resource-base.herokuapp.com/download/data.db') except requests.Timeout: - logger.critical('连接超时, 将使用单线程重新尝试下载') - try: - download('https://filebase.vercel.app/download/data.db') - except requests.Timeout: - logger.critical('连接超时, 请自行前往 https://filebase.vercel.app/download/data.db 下载文件') - logger.critical('并放置在 ./bin/db/ 文件夹内') - sys.exit(-1) + logger.critical('连接超时')