Асинхронные загрузки S3 в FastAPIPython

Программы на Python
Anonymous
Асинхронные загрузки S3 в FastAPI

Сообщение Anonymous »

Я пытаюсь добавить некоторые функции в свое приложение FastAPI, которое будет асинхронно обновлять модель машинного обучения (полученную из корзины S3). Идея состоит в том, чтобы обновлять эту модель раз в час, не блокируя способность API реагировать на запросы ЦП. связанные задачи, такие как запросы на вывод модели.

Код: Выделить всё

# Global model variable
ml_model = None

# Async function to download model from S3
async def download_model_from_s3(path="integration-tests/artifacts/MULTI.joblib"):
global ml_model
s3_client = boto3.client("s3")
bucket = os.environ.get("BUCKET_BUCKET", "artifacts_bucket")
try:
local_model_path = './model.joblib'
download_coroutine = s3_client.download_file(bucket, path, local_model_path)
await download_coroutine
ml_model = joblib.load(local_model_path)
http://logging.info(f"Model updated.")

except Exception as e:
logging.exception(f"Error downloading or loading model: {e}")

# Asynchronous scheduler function that updates the model every interval
async def scheduler(bucket_name: str, model_key: str, interval=60):
while True:
# Sleep for the specified interval (in minutes)
await asyncio.sleep(interval * 60)
# Call the download function to update the model
await download_model_from_s3(bucket_name, model_key)

app = FastAPI()

# Startup event to start the scheduler
@app.on_event("startup")
async def startup_event():
# BLOCKING: Download the model once at startup to ensure it is available
download_model_from_s3()  # Blocking, ensures model is available
# Start the scheduler to update the model every 60 minutes (async, non-blocking)
await scheduler(bucket_name, model_key, interval=60)
Я знаком с FastAPI, но относительно новичок в асинхронном программировании. Мой вопрос: правильный ли это способ асинхронного извлечения данных из S3? Требуется ли отдельный асинхронный клиент S3?
Я предпочел использовать оператор while true вместо явного планирования задания один раз в час. Однако я не уверен в целесообразности этого метода.

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

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