У меня есть небольшой файл размером 11 МБ в корзине Google Cloud Storage. (Это хранилище проекта Firebase.) Я использовал пример python GCS для его загрузки. У меня есть учетные данные в env var GOOGLE_APPLICATION_CREDENTIALS.
Моя проблема в том, что для загрузки требуется более 30 сек c. После запуска он попадает в печать «Downloading blob» 2 se c, что замечательно, но затем зависает на 30 se c перед фактической загрузкой. Используя strace и procmon, кажется, что TCP тратит много времени на повторное подключение и отключение с lga25s62-in-x0a.1e100.net
(Google) и lga34s30-in-x10.1e100.net
через IPv6 и https. После нескольких раундов из них (предположительно, получая таймауты, я не вижу), начинается фактическая загрузка, которая занимает меньше пары секунд.
Один намек кажется парой из 20 с c время ожидания опроса на сокете AF_INET6; я могу получить GCS python API, чтобы не пытаться использовать IPv6?
Я использую Ubuntu 18.04 в WSL, python 3.7, последний Python google-cloud-storage python API 1.28.0 .
def download_blob(bucket_name, source_blob_name, destination_file_name):
"""Downloads a blob from the bucket."""
# bucket_name = "your-bucket-name"
# source_blob_name = "storage-object-name"
# destination_file_name = "local/path/to/file"
print('Starting client')
storage_client = storage.Client()
print('Getting bucket')
bucket = storage_client.bucket(bucket_name)
print(f'Getting blob from {bucket}')
blob = bucket.blob(source_blob_name)
print(f'Downloading blob {blob}')
blob.download_to_filename(destination_file_name)
print(
"Blob {} downloaded to {}.".format(
source_blob_name, destination_file_name
)
)
download_blob('my-bucket.appspot.com', 'tmp/test-scene.blend', '/tmp/test-scene.blend')