Erstellen und streamen Sie ein großes Archiv, ohne es im Arbeitsspeicher oder auf der Festplatte zu speichern

Ich möchte Benutzern das gleichzeitige Herunterladen eines Archivs mehrerer großer Dateien ermöglichen. Die Dateien und das Archiv sind jedoch möglicherweise zu groß, um auf meinem Server im Arbeitsspeicher oder auf der Festplatte gespeichert zu werden (sie werden von anderen Servern im laufenden Betrieb gestreamt). Ich möchte das Archiv generieren, während ich es an den Benutzer streame.

Ich kann Tar oder Zip verwenden oder was auch immer am einfachsten ist. Ich verwende Django, mit dem ich in meiner Antwort einen Generator oder ein dateiähnliches Objekt zurückgeben kann. Mit diesem Objekt kann der Prozess weitergepumpt werden. Es fällt mir jedoch schwer, herauszufinden, wie man diese Art von Dingen um die Zip- oder Tarfile-Bibliotheken erstellt, und ich befürchte, sie unterstützen möglicherweise nicht das Lesen von Dateien, während sie erstellt werden, oder das Lesen des Archivs, während es erstellt wird.

Diese Antwort aufKonvertieren eines Iterators in ein dateiähnliches Objekt könnte helfen.tarfile#addfile dauert eine iterable, aber es scheint sofort zu übergebenshutil.copyfileobjDies ist also möglicherweise nicht so generatorfreundlich, wie ich es mir erhofft hatte.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage