Estoy ejecutando una API rápida y cuando estaba desarrollando tenía el siguiente código en mi archivo app.py
código en app.py:
import uvicorn if __name__=="__main__": uvicorn.run("app.app:app",host='0.0.0.0', port=4557, reload=True, debug=True, workers=3) así que estaba a punto de ejecutar CMD ["python3","app.py"] en mi Dockerfile.
en el ejemplo de fastapi hicieron algo como esto:
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]Quiero saber cuál es la diferencia entre estos dos métodos, ya que creo que ambos funcionarán.
No, no hay diferencia.
El método de ejecución de la línea de comandos ( uvicorn app.main:app ) y la ejecución de app.py usando el comando python ( python app.py ) son iguales. Ambos métodos están llamando a la uvicorn.main.run(...) bajo el capó.
En otras palabras, el comando uvicorn es un acceso directo a la uvicorn.run(...) .
Entonces, en tu caso, la llamada a la función
uvicorn.run("app.app:app",host='0.0.0.0', port=4557, reload=True, debug=True, workers=3)se puede hacer mediante la línea de comandos de uvicorn como,
uvicorn app.app:app --host 0.0.0.0 --port 4557 --reload --debug --workers 3 La opción --debug está oculta en la página de ayuda de opciones de la línea de comandos , pero se puede encontrar en el código fuente . Por lo tanto, se siente que ejecutar la aplicación usando el comando uvicorn puede considerarse como algo de producción.
La respuesta es no . No habrá diferencia en la aplicación, la implementación con Docker solo lo hace más fácil , sin Docker, debe ejecutarlo con un servidor compatible con ASGI como Uvicorn, también es posible que desee configurar algunas herramientas para asegurarse de que se reinicie automáticamente si se detiene o accidentes En lugar de tratar de manejarlo manualmente, una imagen de Docker puede manejar todos estos trabajos automáticamente.