更新了资源下载地址并且将多线程下载更改为单线程下载

This commit is contained in:
MarkusJoe
2022-03-20 13:32:05 +08:00
parent 5148dceb7d
commit 8b07e25b88
1 file changed
+3 -87
+3 -87
View File
@@ -7,60 +7,14 @@
import os import os
import sys
import time import time
import requests import requests
import threading
from bin.utils.logger import logger 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 cost(func):
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
logger.info('文件开始开始下载') logger.info('开始下载')
s = time.time() s = time.time()
execute = func(*args, **kwargs) execute = func(*args, **kwargs)
e = time.time() e = time.time()
@@ -70,38 +24,6 @@ def cost(func):
return wrapper 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 @cost
def download(url: str) -> None: def download(url: str) -> None:
""" """
@@ -118,12 +40,6 @@ if __name__ != '__main__':
if not os.path.exists('./bin/db/data.db'): if not os.path.exists('./bin/db/data.db'):
logger.warning('数据库文件不存在, 即将开始下载') logger.warning('数据库文件不存在, 即将开始下载')
try: 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: except requests.Timeout:
logger.critical('连接超时, 将使用单线程重新尝试下载') 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)