Иногда после загрузки мне нужно загрузить их с S3, чтобы вычислить некоторую метаинформацию.
В настоящее время я для этого я использую этот код (посмотрите fetch_file):
Код: Выделить всё
def _get_file_extension(key) -> str
...
class S3Storage:
def __init__(self, *args, **kwargs):
...
self._config = botocore.config.Config(
read_timeout=read_timeout,
connect_timeout=connect_timeout,
retries={
"total_max_attempts": ...,
"max_attempts": ...,
},
signature_version="v4",
)
self._session = self._create_session()
def _create_session():
return aioboto3.Session()
def _create_client(self):
return self._session.client(
service_name="s3",
endpoint_url=self._endpoint_url,
region_name=self._region,
aws_access_key_id=self._access_key_id,
aws_secret_access_key=self._secret_access_key,
config=self._config,
)
async def fetch_file(self, key: str, bucket: str | None = None) -> str:
try:
async with self._create_client() as client:
response = await client.get_object(Bucket=bucket or self._bucket, Key=key)
async with aiofiles.tempfile.NamedTemporaryFile(
"wb",
suffix=_get_file_extension(key),
delete=False,
) as file:
async for chunk in response["Body"]:
await file.write(chunk)
return str(file.name)
except botocore.exceptions.ClientError as e:
...
except aiohttp.ServerTimeoutError as e:
...
except (
botocore.exceptions.BotoCoreError,
aiohttp.ClientError,
) as e:
...
Может кто-нибудь помочь мне разобраться, почему загрузка файла с s3 занимает так много времени и что я могу с этим сделать .
Подробнее здесь: https://stackoverflow.com/questions/790 ... eally-slow