Qget est une bibliothèque sous licence Apache2, écrite en Python, pour télécharger les ressources Web de manière asynchrone le plus rapidement possible.
Sous le capot, il bénéficie d' asyncio et aiohttp de créer plusieurs connexions simultanées pour les ressources et de le télécharger à l'aide de fichiers de pièce tamponnés.
Table des matières
wget vs qgettqdm )chunk_bytes et max_part_mbasyncio par qget_coro Coroutinewget vs qget Considérez le fragment de configuration nginx simple comme ceci:
http {
server {
...
limit_rate 5m ;
...
}
} Comparons maintenant les statistiques de téléchargement pour wget et qget pour le fichier et la configuration de 1000 Mo mentionnés ci-dessus:
| Application | Temps total [s] | Avg Speed [MB / S] | Détails |
|---|---|---|---|
wget | 251.34 | 3.98 | |
qget | 16h00 | 95.97 | Test de limite de connexion: 5.00 Télécharger: 10.42s Réécriture des pièces: 0,58s |
Conclusion :
Pour une limitation de taux simple ( par connexion ), qget permet d'atteindre plusieurs fois la vitesse de téléchargement plus rapide en fonction de la vitesse de connexion Internet de l'utilisateur, du nombre de demandes simultanées et de la configuration du serveur de ressources. Dans l'exemple ci-dessus, qget a atteint plus de 24x Speed de téléchargement de wget .
Pour des cas plus compliqués ( par exemple, la limite de connexions par IP ) Le test de mesure de la limite de connexion automatique a été créé pour calculer le nombre de demandes simultanées pour les rejets du serveur suivant.
Vous pouvez télécharger des fichiers binaires sélectionnés à partir des versions. Versions disponibles:
Pour installer le module qget , simplement:
$ pip install qgetAssurez-vous que Anaconda est installé.
Pour construire sur Windows (dans une invite Anaconda):
$ build.bat Pour s'appuyer sur POSIX (les packages libc-bin et binutils sont nécessaires):
$ build.shArguments de fonction:
URL (STR): l'URL pour télécharger la ressource.
FilePath (Str, Facultatif): chemin de sortie pour la ressource téléchargée.
Si vous ne le définissez pas, il pointe vers le répertoire de travail actuel et le nom de fichier à partir de l'URL. Par défaut à aucun.
Override (bool, facultatif): Flag Si le fichier de sortie existant doit être remplacé. Par défaut est faux.
auth (str, facultatif): chaîne de l'utilisateur: paire de mots de passe pour la connexion SSL. Par défaut à aucun.
Verify_SSL (bool, facultatif): Flag Si la validation du certificat SSL doit être effectuée. Par défaut est vrai.
MOCK_BROWSER (bool, facultatif): Indicateur Si l'en-tête d'utilisateur-agent doit être ajouté à la demande. Par défaut est vrai.
Chaîne d'agent utilisateur par défaut: 'Mozilla / 5.0 (Windows NT 10.0; Win64; x64) Applewebkit / 537.36
(Khtml, comme Gecko) Chrome / 101.0.4951.67 Safari / 537.36 '
proxy_url (str, facultatif): http / socks4 / socks5 URL proxy au format 'protocole: // utilisateur: mot de passe @ ip: port'.
Par défaut à aucun.
En-têtes: (Dict [Str, Str], Facultatif): En-têtes personnalisées à envoyer. Par défaut à aucun.
Si l'utilisateur set peut spécifier son propre agent utilisateur et accepter les en-têtes, sinon les valeurs par défaut seront utilisées.
Progress_ref (ProgressState, facultatif): référence à l'état de progrès.
S'il est passé, tous les octets de pièces et le statut de réécriture seront mis à jour. Par défaut à aucun.
Max_Connections (int, facultatif): quantité maximale de connexions HTTP asynchrones. Par défaut à 50.
connection_test_sec (int, facultatif): temps maximum en secondes attribuées au test
Combien de connexions asynchrones peuvent être réalisées à l'URL.
Si le test réglé sur 0 sera omis. Par défaut à 5.
Chunk_Bytes (int, facultatif): Chunk of Data Lire dans itération à partir de l'URL et enregistrer dans le fichier de pièce en octets.
Sera également utilisé lors de la réécriture des pièces pour sortir le fichier. Si la limite est fournie, cela peut être remplacé
itération de flux. Par défaut, 2621440.
MAX_PART_MB (Float, Facultatif): Taille de partie MAX souhaitable (si possible) dans les mégaoctets. Par défaut à 5.
Retries (INT, Facultatif): Retries Numéro pour le téléchargement des pièces. Par défaut est 10.
RETRY_SEC (int, Facultatif): Il est temps d'attendre entre les tentatives de téléchargement de pièce en secondes. Par défaut est 1.
Limit (Str, Facultatif): Téléchargez la limite de taux dans les MBP. Peut être fourni en unité comme "Nunit", par exemple. "5m".
Unités valides (cas insensible): B, K, M, G, KB, MB, GB. 0 octets sera traité comme aucune limite.
Par défaut à aucun.
TMP_DIR (STR, Facultatif): Chemin de répertoire temporaire. Sinon, il est le réglage des points sur le répertoire OS TMP.
Par défaut à aucun.
Debug (bool, facultatif): débogage du drapeau. Par défaut est faux.
À utiliser dans le code Importez simplement la fonction du module:
from qget import qget
url = "https://speed.hetzner.de/100MB.bin"
qget ( url ) À utiliser dans le code avec propre boucle et asyncio :
import asyncio
from qget import qget_coro
async def main ( loop ):
url = "https://speed.hetzner.de/100MB.bin"
download_task = loop . create_task ( qget_coro ( url ))
await download_task
# Or just
# await qget_coro(url)
loop = asyncio . get_event_loop ()
loop . run_until_complete ( main ( loop ))
loop . close () Utilisation pour les crochets de progression (par défaut, les crochets sont utilisés pour afficher la barre de progression tqdm ):
from qget import ProgressState , qget
def print_download_progress ( progress : ProgressState ) -> None :
print ( f"Download: { progress . get_download_progress ():.2f } %" , end = " r " )
if progress . get_download_bytes () == progress . total_bytes :
print ()
def print_rewrite_progress ( progress : ProgressState ) -> None :
print ( f"Rewrite: { progress . get_rewrite_progress ():.2f } %" , end = " r " )
if progress . rewrite_bytes == progress . total_bytes :
print ()
url = "https://speed.hetzner.de/100MB.bin"
progress = ProgressState (
on_download_progress = print_download_progress ,
on_rewrite_progress = print_rewrite_progress
)
qget ( url , progress_ref = progress ) Utilisation: qget [-H] [-o filepath] [-f] [-a auth] [--no-verify] [--no-mock]
[--proxy proxy_url] [-h en-tête] [-c max_connections]
[--tesst Connection_Test_Sec] [--bytes Chunk_Bytes] [--Parts Max_Part_MB]
[--retrées RETRES] [--retry_sec retry_sec] [--limit limit] [--tmp tmp_dir]
[--debug] [-v]
URL
Télécharges la ressource à partir de l'URL donnée dans des pièces tamponnées à l'aide de connexions HTTP asynchrones
avec session AIOHTTP.
Arguments de position:
URL URL des ressources
Options:
-H, --help afficher ce message d'aide et quitter
-o filepath, --output filepath
Chemin de sortie pour la ressource téléchargée.
-F, - Force Forces File Override pour la sortie.
-a auth, - Auth authring de l'utilisateur: paire de mots de passe pour la connexion SSL.
--No-Verify désactive la validation du certificat SSL.
--No-Mock désactive l'en-tête par défaut de l'agent utilisateur.
--Proxy proxy_url http / socks4 / socks5 URL proxy au format
'protocole: // utilisateur: mot de passe @ ip: port'.
-HEAGE, - Header-tête
En-tête personnalisé dans le format «Nom: valeur». Peut être fourni plusieurs
fois.
-c Max_Connections, - Connections Max_Connections
Montant maximum de connexions HTTP asynchrones.
--Test Connection_test_Sec
Temps maximum en secondes attribuées pour tester la quantité asynchrone
Les connexions peuvent être obtenues à l'URL. Utilisez 0 pour sauter.
--Bytes Chunk_Bytes Chunk of Data Lire dans l'itération à partir de l'URL et enregistrer dans le fichier partie dans
octets. Sera également utilisé lors de la réécriture des pièces pour sortir le fichier.
--Tarter max_part_mbirable (si possible) Taille de partie maximale dans les mégaoctets.
- Retries Retries Retries Retries pour le téléchargement de pièces.
--retry_sec retry_sec temps pour attendre entre les tentatives de téléchargement de pièce en secondes.
- Limit Limit Limit Téléchargement Limite en MBPS. Peut être fourni en unité comme «nunit»,
par exemple, par exemple «5m». Unités valides (cas insensible): B, K, M, G, KB, MB, GB.
0 octets sera traité comme aucune limite.
--TMP TMP_DIR Path de répertoire temporaire. Sinon, le réglez des points sur OS TMP
annuaire.
- Debug Debug Flag.
-v, --Version Affiche la version réelle de Qget.
Peut être utilisé également à partir du module Python avec les mêmes arguments que pour le binaire:
python -m qget https://speed.hetzner.de/100MB.binPlusieurs en-têtes peuvent être fournis comme suit:
python -m qget -H ' name1:value1 ' -H ' name2:value2 ' https://speed.hetzner.de/100MB.bin Limiter essaie de réduire le taux d'octets téléchargés en ajoutant des pauses entre l'itération sur le contenu des ressources. Si un taux de téléchargement très faible est demandé, essayez de réduire le montant des connexions ( max_connections ou --connections MAX_CONNECTIONS ) pour atteindre une meilleure précision pour la limite.
La taille des pièces est calculée en fonction d'exécution en fonction de la taille des ressources en octets et de la quantité maximale de connexions asynchrones définies par l'utilisateur (ou le test de connexion). Taille de partie max param ( max_part_mb ou --part MAX_PART_MB ) fourni par l'utilisateur est utilisé comme limite supérieure pour la valeur calculée.
part_bytes = min (ressource_bytes / connexions, max_part_bytes)