хм - какую проблему вы пытаетесь решить? Я подозреваю, что ответ зависит от того, что вы пытаетесь сделать с данными.
Поскольку в общем случае вам не нужен целый 3Gb-файл в памяти, я не буду хранить фрагменты в массиве, а перебирать http_response и записывать его прямо на диск, во временный или постоянный файл с использованием обычного Метод write () для соответствующего дескриптора файла.
если вы хотите получить две копии данных в памяти, для вашего метода потребуется не менее 6 ГБ для вашего гипотетического файла 3 ГБ, что, вероятно, важно для большинства аппаратных средств. Я знаю, что методы соединения с массивами бывают быстрыми и все такое, но, поскольку это действительно ограниченный процесс, возможно, вы хотите найти способ сделать это лучше? StringIO (http://docs.python.org/library/stringio.html) создает строковые объекты, которые могут быть добавлены в память; чисто Python, поскольку он должен работать с неизменяемыми строками, просто использует трюк соединения с массивом внутри, но cStringIO на основе c может фактически добавить к внутреннему буферу памяти. У меня нет его исходного кода под рукой, так что это будет нести проверку.
если вы хотите провести какой-то анализ данных и действительно хотите сохранить в памяти минимальные издержки, вы можете рассмотреть некоторые объекты байтового массива из Numeric / NumPy в качестве альтернативы StringIO. они представляют собой высокопроизводительный код, оптимизированный для больших массивов, и могут быть именно тем, что вам нужно.
в качестве полезного примера, для универсального объекта обработки файлов, который использует эффективный для памяти подход, пригодный для итераторов, вы, возможно, захотите проверить код обработки фрагмента файла django:
http://code.djangoproject.com/browser/django/trunk/django/core/files/base.py.