Warum iter_content und chunk_size in python-requests
Warum sollte ich iter_content
- und speziell ich bin echt verwirrt, mit dem Zweck die Verwendung von chunk_size , als ich versucht habe, es zu benutzen und in jeder Weise die Datei scheint gerettet zu sein, nach dem Download erfolgreich.
g = requests.get(url, stream=True)
with open('c:/users/andriken/desktop/tiger.jpg', 'wb') as sav:
for chunk in g.iter_content(chunk_size=1000000):
print (chunk)
sav.write(chunk)
Mir helfen zu verstehen, die Verwendung von iter_content
und was wird geschehen, wie Sie sehen, ich bin mit 1000000 bytes als chunk_size
, was ist der Zweck genau und Ergebnisse?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist um zu verhindern, dass das laden der gesamten Reaktion gleichzeitig in den Speicher (es erlaubt Ihnen auch, mit der Umsetzung einiger der Gleichzeitigkeit während Sie den stream der Antwort, so dass Sie können arbeiten Sie während der Wartezeit für den Wunsch zu beenden).
Den Zweck der Einstellung der streaming-Anfrage ist in der Regel für die Medien. Wie versuchen Sie den download einer 500 MB .mp4-Datei mit Anfragen, die Sie streamen möchten die Antwort (und schreiben Sie den stream in Stücke der
chunk_size
), anstatt zu warten, für alle 500mb geladen werden in python auf einmal.Wenn Sie wollen, um die UI-feedback (wie der download-Fortschritt wie "heruntergeladen
<chunk_size>
bytes..."), werden Sie brauchen, um Strom und chunk. Wenn Ihre Antwort enthält einen Content-header-Größe, können Sie berechnen, % Fertigstellung auf jedes Stück Sie sparen auch.sav
ist ein offenes Datei-handle ist, ist es möglich zu machen, stellt eine offene Pfeife der Spieler oder so etwas.stream=True
dem Antwort - Objekt zurückgegeben.get()
hält die tatsächlichen, gesamten Inhalt inResponse.content
. Aber wenn Sie streamen, ist das Verhalten der.content
offensichtlich ändern muss (es kann nicht halten alle Daten), verwenden Sie deniter_content
Methode zum abrufen von nachfolgenden Blöcken von Daten vom server in.content
und gibt es zurück. Dies folgt dem typischen python iterator Muster.Aus der Dokumentationen
chunk_size
ist die Größe der Daten, das app wird das Lesen in den Speicher, wennstream=True
.Zum Beispiel, wenn die Größe der Antwort ist 1000 und
chunk_size
auf 100 festgelegt, teilen wir die Antwort in zehn Stücke schneiden.