多线程下载器
抄自这里:https://www.geeksforgeeks.org/simple-multithreaded-download-manager-in-python/
[root@Da scripts]# cat multi_thread_downloader.py
import requests
from threading import Thread, current_thread, enumerate
def handler(start, end, url, filename):
headers = {'Range': 'bytes={}-{}'.format(start, end)}
r = requests.get(url, headers=headers, stream=True)
with open(filename, "r+b") as fp:
fp.seek(start)
var = fp.tell()
fp.write(r.content)
def download_file(url_of_file, number_of_threads):
r = requests.head(url_of_file)
file_name = url_of_file.split('/')[-1]
file_size = int(r.headers['content-length'])
part = int(file_size) // number_of_threads
fp = open(file_name, 'wb')
fp.write('\0'.encode() * file_size)
fp.close()
for i in range(number_of_threads):
start = part * i
end = start + part
t = Thread(target=handler, kwargs={'start': start, 'end': end, 'url': url_of_file, 'filename': file_name})
t.setDaemon(True)
t.start()
main_thread = current_thread()
for t in enumerate():
if t is main_thread:
continue
t.join()
print('{} Download OK.'.format(file_name))
if __name__ == '__main__':
file_url = 'http://dldir1.qq.com/qqfile/qq/QQ7.1/14522/QQ7.1.exe'
download_file(url_of_file=file_url, number_of_threads=4)