A Administrador de descargas es básicamente un programa informático dedicado a la tarea de descargar archivos independientes de Internet. Aquí vamos a crear un Administrador de descargas simple con la ayuda de subprocesos en Python. Usando subprocesos múltiples, un archivo se puede descargar en forma de fragmentos simultáneamente desde diferentes subprocesos. Para implementar esto, crearemos una herramienta de línea de comandos simple que acepte la URL del archivo y luego lo descargue.
Requisitos previos: máquina Windows con Python instalado.
java leer csv
Configuración
Descargue los paquetes mencionados a continuación desde el símbolo del sistema.
1. Paquete Click: Click es un paquete de Python para crear hermosas interfaces de línea de comandos con tan poco código como sea necesario. Es el kit de creación de interfaz de línea de comandos.
instalación de pip, haga clic
2. Paquete de solicitudes: en esta herramienta descargaremos un archivo basado en la URL (direcciones HTTP). Requests es una biblioteca HTTP escrita en Python que le permite enviar solicitudes HTTP. Puede agregar encabezados de archivos de datos de varias partes y parámetros con diccionarios simples de Python y acceder a los datos de respuesta de la misma manera.
solicitudes de instalación de pip
3. Paquete de subprocesos: para trabajar con subprocesos necesitamos un paquete de subprocesos.
roscado de instalación de pipa
Implementación
Nota:
El programa se ha dividido en partes para que sea fácil de entender. Asegúrese de no perderse ninguna parte del código mientras ejecuta el programa.
Paso 1: importar los paquetes necesarios
Estos paquetes proporcionan las herramientas necesarias para que las solicitudes web manejen entradas de línea de comandos y creen subprocesos.
Pythonimport click import requests import threading
Paso 2: crear la función de controlador
Cada hilo ejecutará esta función para descargar su parte específica del archivo. Esta función es responsable de solicitar solo un rango específico de bytes y escribirlos en la posición correcta del archivo.
Pythondef Handler(start end url filename): headers = {'Range': f'bytes={start}-{end}'} r = requests.get(url headers=headers stream=True) with open(filename 'r+b') as fp: fp.seek(start) fp.write(r.content)
Paso 3: Defina la función principal con un clic
Convierte la función en una utilidad de línea de comandos. Esto define cómo los usuarios interactúan con el script desde la línea de comando.
Python#Note: This code will not work on online IDE @click.command(help='Downloads the specified file with given name using multi-threading') @click.option('--number_of_threads' default=4 help='Number of threads to use') @click.option('--name' type=click.Path() help='Name to save the file as (with extension)') @click.argument('url_of_file' type=str) def download_file(url_of_file name number_of_threads):
Paso 4: establezca el nombre del archivo y determine el tamaño del archivo
Necesitamos el tamaño del archivo para dividir la descarga entre subprocesos y garantizar que el servidor admita descargas a distancia.
Python r = requests.head(url_of_file) file_name = name if name else url_of_file.split('/')[-1] try: file_size = int(r.headers['Content-Length']) except: print('Invalid URL or missing Content-Length header.') return
Paso 5: preasignar espacio para archivos
La preasignación garantiza que el archivo tenga el tamaño correcto antes de escribir fragmentos en rangos de bytes específicos.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'