Загрузка большого файла с s3 с помощью aioboto3 и aiofiles происходит очень медленно.Python

Программы на Python
Anonymous
Загрузка большого файла с s3 с помощью aioboto3 и aiofiles происходит очень медленно.

Сообщение Anonymous »

У меня высоконагруженная система, в которую многие пользователи могут загружать большие файлы (+1 ГБ).
Иногда после загрузки мне нужно загрузить их с 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:
...
По какой-то причине эта реализация происходит очень медленно. После профилирования я обнаружил, что загрузка файла размером 1 ГБ занимает 300 секунд. Все 300 секунд были потрачены именно на метод fetch_file.
Может кто-нибудь помочь мне разобраться, почему загрузка файла с s3 занимает так много времени и что я могу с этим сделать .

Подробнее здесь: https://stackoverflow.com/questions/790 ... eally-slow

Вернуться в «Python»