Twórz i przesyłaj duże archiwum bez przechowywania go w pamięci lub na dysku

Chcę zezwolić użytkownikom na pobieranie archiwum wielu dużych plików jednocześnie. Jednak pliki i archiwum mogą być zbyt duże, aby przechowywać je w pamięci lub na dysku na moim serwerze (są one przesyłane strumieniowo z innych serwerów w locie). Chciałbym wygenerować archiwum podczas przesyłania go do użytkownika.

Mogę używać Tar lub Zip lub cokolwiek jest najprostsze. Używam django, co pozwala mi zwrócić generator lub obiekt podobny do pliku w mojej odpowiedzi. Ten obiekt może być wykorzystany do pompowania całego procesu. Mam jednak problem z ustaleniem, jak zbudować coś takiego w plikach zip lub bibliotekach tarfile, i obawiam się, że mogą nie obsługiwać odczytu plików w miarę ich tworzenia lub czytania archiwum w miarę ich budowania.

Ta odpowiedź jest włączonakonwertowanie iteratora na obiekt podobny do pliku może pomóc.tarfile#addfile przyjmuje iterowalny, ale wydaje się, że natychmiast to przekazujeshutil.copyfileobj, więc może nie być tak przyjazny dla generatora, jak się spodziewałem.

questionAnswers(4)

yourAnswerToTheQuestion