多线程下载器

抄自这里: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)

results matching ""

    No results matching ""