Implementé un modelo de aprendizaje automático usando Fast API en Heroku e implementé el trabajador en segundo plano y asíncrono, pero cuando estoy haciendo inferencias, sigo recibiendo el error 503. Sé que el tiempo de respuesta del servidor en Heroku es de 30 segundos.
Pero como estoy usando un trabajador en segundo plano, debería poder ejecutarlo en segundo plano; en cambio, recibo errores. Estoy usando el plan gratuito de Heroku para implementar
app = FastAPI() response = {} @app.get('/predict') async def predictions(solute, solvent): mol = Chem.MolFromSmiles(solute) response["predictions"] = delta_g.item() return {'result': response} async def predict(background_tasks: BackgroundTasks,solute,solvent): background_tasks.add_task(predictions,solute,solvent) from predict_json import json_data_func @app.get('/predict_two') async def predictions_two(solute): for i in data: delta_g, interaction_map = model([get_graph_from_smile(Chem.MolToSmiles(Chem.AddHs(Chem.MolFromSmiles(solute)))).to(device), get_graph_from_smile(Chem.MolToSmiles(Chem.AddHs(Chem.MolFromSmiles(i)))).to(device)]) response_two[i] = delta_g.item() return {'result': response_two} async def predict_two(background_tasks: BackgroundTasks,solute): background_tasks.add_task(predictions_two,solute) Archivo de proceso: web: gunicorn -w 2 -k uvicorn.workers.UvicornWorker main:app
Entonces, ¿qué debo hacer para ejecutar mi código en segundo plano sin tener un error de tiempo de espera de respuesta del servidor?
Puede agregar el parámetro de timeout de espera (con -t o --timeout ) al gunicorn como se indica en la documentación del gunicorn .
Ejemplo de uso:
gunicorn -w 2 -k uvicorn.workers.UvicornWorker -t 90 main:app