2017-01-26 5 views
0

Использует ли метод bucket.list() целые данные файла не только информацию о файле, такую ​​как имя файла или размер?О bucket.list() модуля boto в python

Есть три файла 1,000,000 байт в data/hello/:

data/hello/0001.txt (1,000,000 bytes) 
data/hello/0002.txt (1,000,000 bytes) 
data/hello/0003.txt (1,000,000 bytes) 

и я побежал мой код (ниже).

размер Результат 3000000.

Это заставляет меня думать, что она приносит все данные из файлов и генерирует больше трафика. Я прав?

conn = boto.connect_s3() 
bucket = conn.get_bucket('my_bucket') 
object_list = bucket.list(prefix='data/hello/') 

data_size = 0 
for object in object_list: 

    for data in object: 
     if type(data) is str: 
      data_size += len(data) 

print('size: %d'%data_size) 

ответ

0

Нет, bucket.list не извлечь содержимое всех объектов. Когда вы выполняете итерацию по каждому из keys, возвращаемому bucket.list, boto делает отдельные вызовы для извлечения содержимого объекта (предположительно, с помощью генератора).

т.е. это извлечение контента на каждой итерации вашего цикла:

for data in object: 
    # data is fetched right before here 
    if type(data) is str: 
+0

Спасибо! Еще один вопрос: ^^ Я закрыл соединение ** conn.close() ** перед входом в итерацию. Я ожидал, что он не получит весь контент. из-за закрытия соединения. но он смог получить хотя бы закрытие соединения. Разве это не связано с закрытием соединения? – Kim