Heim >Backend-Entwicklung >Python-Tutorial >Wie kann die Anforderungsbibliothek von Python für das Streaming großer Dateidownloads optimiert werden?
Requests, eine renommierte HTTP-Bibliothek, steht vor der Herausforderung, große Dateidownloads zu verarbeiten, die den verfügbaren Speicher überschreiten. Um diese Einschränkung zu überwinden, ist es entscheidend, einen Streaming-Ansatz zu implementieren, der Dateiblöcke beim Empfang liest und schreibt.
Der herkömmliche Ansatz, wie im bereitgestellten Code-Snippet zu sehen ist, greift in dieser Hinsicht zu kurz. Trotz der Verwendung von r.iter_content(), das den Antwortinhalt in Blöcken durchläuft, wird die Antwort immer noch im Speicher zwischengespeichert.
Um dieses Problem zu beheben, sollten Sie erwägen, Streaming-Funktionen in den Code einzuführen. Die wichtigste Änderung liegt in der Implementierung von „requests.get()“ mit dem auf „True“ gesetzten Stream-Parameter. Dadurch kann die Bibliothek den Antwortinhalt abrufen, ohne ihn im Speicher zu speichern:
def download_file(url): local_filename = url.split('/')[-1] with requests.get(url, stream=True) as r: r.raise_for_status() with open(local_filename, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) return local_filename
Durch diese Optimierung bleibt der Speicherverbrauch von Python unabhängig von der heruntergeladenen Dateigröße begrenzt. Durch die Verwendung von iter_content mit einer angegebenen Blockgröße wird sichergestellt, dass Daten in überschaubaren Teilen in die Datei geschrieben werden, wodurch eine Speichererschöpfung vermieden wird.
Beachten Sie, dass die Anzahl der in jedem Block zurückgegebenen Bytes möglicherweise nicht genau mit der angegebenen Blockgröße übereinstimmt . Es kommt häufig vor, dass die abgerufene Blockgröße variiert und deutlich größer als die angegebene Größe ist. Einzelheiten zu diesem Verhalten finden Sie in der offiziellen Dokumentation zum iter_content- und Body-Content-Workflow.
Das obige ist der detaillierte Inhalt vonWie kann die Anforderungsbibliothek von Python für das Streaming großer Dateidownloads optimiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!