赞
踩
本文使用的是FastAPI框架,从这篇文章中可以了解到:
- 如何配置并将FastAPI应用部署到AIF上
- 为什么以及何时应该使用 FastAPI、Gunicorn 和 Uvicorn
- 如何以及为何设置 Gunicorn+Uvicorn 组合作为 ASGI 服务器
目录
操作简单一步到位!
- from fastapi import FastAPIimport uvicorn
- app = FastAPI()
-
-
- @app.get("/")
- async def root():
- return {"message": "Hello World"}
-
- if __name__ == '__main__':
- uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)
启动命令
使用进程管理器确保你以弹性方式运行运行多个进程,你可以执行服务器升级而不会丢弃客户端的请求。
一个进程管理器将会处理套接字设置,启动多个服务器进程,监控进程活动,监听进程重启、关闭等信号。
1. 使用uvicorn
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
Uvicorn 提供一个轻量级的方法来运行多个工作进程,比如 `--workers 4`,但并没有提供进行的监控。
uvicorn 在单进程上使用异步协程是有优势的、但是如果接口方法是同步的则走的多进程模式、也就是 workers 的数量、 这个时候 uvicorn 不如 gunicorn、性能上会有些限制。
2. 使用gunicorn
- gunicorn main:app -b 0.0.0.0:8001 -w 4 -k uvicorn.workers.UvicornWorker
- # `-w` 表示 worker 数量,`-k` 表示使用的 worker 类型,`-b` 表示绑定的地址和端口。
到这,你就可以部署并启动运行一个FastAPI的服务了,如果你只是想知道怎么操作,看到这里就可以了。但是,如果你还想知道为什么要用uvicorn和gunicorn,那么请继续往下看!
如果你对uvicorn和gunicorn的概念还不了解,可以先基于上面的内容思考这么一个问题:uvicorn有 worker 的功能, 为什么不直接用uvicorn,还要 gunicorn 挂 uvicorn worker 启动?然后带着这个问题看一下内容~
FastAPI 是用于开发API应用最受欢迎的Python库之一,用于开发API。它以其出色的性能和易用性而闻名。如果你在网页应用中使用机器学习模型,那么它很可能是你首选的工具。
NGINX、Gunicorn 和 Uvicorn 都是经过实践验证的技术,常被用作反向代理和ASGI服务器来部署Python网页应用。如果你熟悉 Django 或 Flask,你可能之前听说过它们中的一些。
FastAPI 是一个现代的、高性能的 Web 框架,用于使用 Python 构建 API,并基于标准类型提示。
它具有以下主要特点:
该框架旨在优化开发人员体验,使您能够以简洁的代码构建具备最佳实践且适合生产环境使用的 API。
与Flask框架不同,FastAPI不包含任何内置的开发服务器。因此,我们需要Uvicorn。它实施ASGI标准,速度快如闪电。ASGI 代表 异步服务器网关接口。
Uvicorn是Python的ASGI Web服务器实现。
Gunicorn是用于Python应用程序的WSGI服务器的一种实现。
Gunicorn是一个符合WSGI标准的Web服务器,用于Python应用程序,它接收从客户端发送到Web服务器的请求,并将其转发到Python应用程序或Web框架(如Flask或Django)上,以便为请求运行适当的应用程序代码。
ASGI(Asynchronous Server Gateway Interface)和 WSGI(Web Server Gateway Interface)都是Python Web应用程序和Web服务器之间的接口标准,它们定义了Web服务器如何与Web应用程序进行通信。
ASGI服务:
Uvicorn 是一个ASGI服务器,用于运行ASGI应用程序。它是一个轻量级、快速且易于部署的服务器,广泛用于FastAPI和其他ASGI框架。
Hypercorn: Hypercorn 也是一个ASGI服务器,与Uvicorn类似,用于运行ASGI应用程序。它具有一些额外的特性,如支持UNIX套接字(UNIX socket)。
Daphne: Daphne 是一个ASGI服务器,专门设计用于运行Django应用程序。它允许将Django应用程序部署为ASGI应用程序。
WSGI服务:
uWSGI: uWSGI 是一个WSGI服务器,广泛用于运行WSGI应用程序。它支持多种应用程序容器和部署模式,可以与各种Web服务器配合使用。
Gunicorn: Gunicorn(Green Unicorn)是一个WSGI服务器,专为Django应用程序设计。它通过多工作进程实现并发处理请求,提高了应用程序的性能。
主要区别在于:
同步 vs. 异步: WSGI 是同步接口,适用于同步Web应用程序。ASGI 是异步接口,适用于异步Web应用程序。ASGI允许应用程序处理长连接、WebSocket等异步操作。
性能: 由于ASGI的异步特性,它更适合处理大量并发请求和高性能需求。WSGI更适合传统的同步Web应用程序。
框架兼容性: ASGI通常用于FastAPI、Starlette、Tornado等异步框架,而WSGI通常用于Django、Flask、Bottle等同步框架。
现在回到最开始提的问题,可以知道,Uvicorn 确实可以单独作为 ASGI 服务器运行,而 Gunicorn 通常用于运行 WSGI 应用程序。但是,当你将它们结合在一起使用时,会有一些特定的好处:
1. 稳定性:Gunicorn 作为一个长期存在且经过良好测试的项目,它的稳定性和健壮性是有保障的。通过将 Gunicorn 与 Uvicorn 结合使用,可以利用 Gunicorn 的管理能力和稳定性,以及 Uvicorn 的异步性能。
2. 进程管理:Gunicorn 提供了一些强大的进程管理功能,例如工作进程的启动、停止和重启。当系统负载增加时,它可以更好地管理资源,而 Uvicorn 单独运行时可能没有这些特性。
3. 部署的简化:对于那些已经习惯使用 Gunicorn 来部署 WSGI 应用程序的组织来说,将 Gunicorn 与 Uvicorn 结合使用可以简化迁移到 ASGI 的过程。团队可以利用现有的 Gunicorn 部署、监控和日志记录基础设施。
4. 配置灵活性:Gunicorn 提供了许多配置选项和插件,可以方便地自定义应用程序的行为。与 Uvicorn 结合使用时,你可以利用这些灵活性,并允许在同一台机器上同时运行 WSGI 和 ASGI 应用程序。
5. 负载均衡:Gunicorn 能够在多个工作进程之间进行负载均衡。这不仅能够更好地利用多核 CPU ,还可以增加系统的可扩展性和冗余性。
总而言之,尽管 Uvicorn 单独使用具有优势,但将 Gunicorn 与 Uvicorn 结合使用可以提供额外的稳定性、灵活性和管理功能。这种组合在具有大量流量和需要高可用性的生产环境中可能尤为有用。
参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。