Solución:
Probé su configuración y después de algunas comprobaciones (nunca usé Heroku antes) supongo que su uvicorn nunca se une al puerto designado (era el comando heroku-cli heroku local
trabajando para ti?)
Su Procfile podría verse así;
web: uvicorn src.main:app --host=0.0.0.0 --port=${PORT:-5000}
Este ejemplo asume que tiene su código fuente dentro de una subcarpeta llamada ‘src’ que tiene un vacío __init__.py
(que indica un módulo de Python, probablemente desee agregar src a PYTHONPATH en su lugar, consulte app.json) y main.py
que contiene su aplicación fastapi;
import socket
import sys
from fastapi import FastAPI
app = FastAPI()
hostname = socket.gethostname()
version = f"{sys.version_info.major}.{sys.version_info.minor}"
@app.get("https://foroayuda.es/")
async def read_root():
return {
"name": "my-app",
"host": hostname,
"version": f"Hello world! From FastAPI running on Uvicorn. Using Python {version}"
}
He agregado mi ejemplo de trabajo a github que puedes ver en heroku (por ahora)
Las respuestas son correctas, pero para usar FastAPI en producción ejecutándose como WSGI con ASGI Los trabajadores es una mejor opción. Por eso, ejecuté un punto de referencia para esto. pregunta, así que aquí están los resultados.
Gunicorn con trabajadores de Uvicorn
Requests per second: 8665.48 [#/sec] (mean)
Concurrency Level: 500
Time taken for tests: 0.577 seconds
Complete requests: 5000
Time per request: 57.700 [ms] (mean)
Uvicorn puro
Requests per second: 3200.62 [#/sec] (mean)
Concurrency Level: 500
Time taken for tests: 1.562 seconds
Complete requests: 5000
Time per request: 156.220 [ms] (mean)
Como puede ver, hay una gran diferencia en RPS (solicitud por segundo) y tiempo de respuesta para cada solicitud.
Procfiles
Gunicorn con trabajadores de Uvicorn
web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
Uvicorn puro
web: uvicorn main:app --workers 4
También puede configurar su FastAPI para que se ejecute en Gunicorn
con uvicorn como proceso de trabajo. A continuación se muestra la línea de comando que puede mantener en el Procfile utilizado por Heroku para hacer que su aplicación esté en funcionamiento. El siguiente comando activará su aplicación en el proceso de 3 trabajadores
web: gunicorn -w 3 -k uvicorn.workers.UvicornWorker main:app
Para ver un video detallado paso a paso, puede visitar este video tutorial que detalla cómo implementar FastAPI en Heroku en solo 6 minutos. o puede tener un tutorial detallado sobre cómo crear e implementar FastAPI basado en Python en Heroku desde esta publicación de blog.