Progression des requêtes Python post
Je suis le téléchargement d'un fichier volumineux à l'aide de l'Python demandes paquet, et je ne peux pas trouver un moyen de donner en retour les données sur la progression de l'upload. J'ai vu un certain nombre de progrès mètres pour le téléchargement d'un fichier, mais elles ne pourront pas travailler pour un upload de fichier.
La solution idéale serait d'avoir une sorte de méthode de rappel tels que:
def progress(percent):
print percent
r = requests.post(URL, files={'f':hugeFileHandle}, callback=progress)
Merci d'avance pour votre aide 🙂
source d'informationauteur Robin Begbie
Vous devez vous connecter pour publier un commentaire.
requests
ne prend pas en charge télécharger streaming par exemple:btw, si vous n'avez pas besoin de faire rapport des progrès accomplis; vous pourriez utiliser un fichier mappé en mémoire de télécharger de gros fichiers.
De solution de contournement, vous pouvez créer un fichier adaptateur similaire à celui de
urllib2 POST de suivi de la progression:
Exemple
Je l'ai eu à travailler avec le code ici: Simple fichier de téléchargement progressbar en PyQt.
Je l'ai changé un peu, à utiliser BytesIO au lieu de StringIO.
L'astuce consiste à générer des données et de l'en-tête de la liste des fichiers manuellement, à l'aide de encode_multipart_formdata() à partir de urllib3
Je recommande d'utiliser un outil de package nommé demandes-toolbeltqui font de la surveillance télécharger des octets très facile, comme
Et vous voudrez peut-être lire cette pour afficher une barre de progression.
falloutboy
's solution est de nice.Et j'ai trouvé un autre projet nommé
requests-toolbelt
dansrequests
site officiel: http://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-fileici est le demandes-toolbelt doc:https://toolbelt.rtfd.org/
Habituellement, vous devez construire un flux de source de données (générateur) qui lit le fichier en bloc et fait état de ses progrès sur la voie (voir kennethreitz/requêtes#663. Cela ne fonctionne pas avec les demandes de fichiers de l'api, car les demandes ne prend pas en charge le streaming de téléchargements (voir kennethreitz/requêtes#295) – un fichier à télécharger se doit d'être complète en mémoire avant qu'il commence à être traitées.
mais les demandes peuvent diffuser du contenu à partir d'un générateur de J. F. Sebastian a prouvé qu'avant, mais ce générateur a besoin pour produire le complet datastream, y compris le multipart d'encodage et de limites. C'est là que affiche vient de jouer.
affiche est écrit à l'origine pour être utilisé avec des pythons urllib2 et prend en charge la diffusion de la génération de plusieurs parties des demandes, en fournissant indication avancement au fur et à mesure. Affiches la page d'Accueil fournit des exemples d'utilisation avec urllib2, mais vous ne voulez vraiment pas à utiliser urllib2. Découvrez ce exemple de code sur la façon de l'Authentification HTTP de Base avec urllib2. Horrrrrrrrible.
Si nous voulons vraiment l'utilisation de l'affiche ainsi que les demandes pour faire des uploads de fichier avec suivi des progrès. Et voici comment: