[python]使用gunicorn部署fastapi服务

简介: [python]使用gunicorn部署fastapi服务

前言

Gunicorn是一种流行的WSGI HTTP服务器,常用于部署Django和Flask等Python Web框架程序。Gunicorn具有轻量级、高稳定性和高性能等特性,可以轻易提高Python WSGI App运行时的性能。

基本原理

Gunicorn采用了pre-fork模型,也就是一个工作进程和多个worker进程的工作模式。在这个模型中,master进程负责接收并处理外部的连接请求,并将这些请求分配给多个worker进程来处理。

当一个gunicorn服务启动时,master进程会首先创建多个worker工作进程,并将它们初始化为一个无限循环的状态,确保worker进程可以不断地等待接收新请求。当一个请求进来,master会将该请求分发给其中一个worker进程。不同的请求分发到不同的worker进程,可以有效提高请求的响应速度和并发处理能力。当某个worker进程崩溃或异常终止时,master进程会自动重新启动一个新的worker工作进程。

安装

pip install gunicorn

示例

首先编写一个简单的服务,请求响应一个字符串"ok",代码文件名为demo1.py

from fastapi import FastAPI
import uvicorn
from fastapi.responses import PlainTextResponse
app = FastAPI()
@app.get("/")
async def root():
    return PlainTextResponse("ok")
if __name__ == "__main__":
    uvicorn.run(app=app, host="0.0.0.0", port=8000, access_log=False)

正常启动,然后使用wrk测试。使用uvicorn的qps为11733.60

$ ps -ef | grep demo1
atlas       2449    1162 44 22:06 pts/0    00:01:11 python demo1.py
atlas       2478    2462  0 22:08 pts/6    00:00:00 grep demo1
$ wrk -t2 -c 100 -d 60s http://127.0.0.1:8000
Running 1m test @ http://127.0.0.1:8000
  2 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     8.59ms    4.36ms 276.86ms   91.44%
    Req/Sec     5.90k   520.55     7.84k    68.54%
  704720 requests in 1.00m, 90.73MB read
Requests/sec:  11733.60
Transfer/sec:      1.51MB

使用gunicorn启动。wrk的测试结果:QPS为25859.47,性能直接提升120%

$ gunicorn demo1:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornWorker
$ ps -ef | grep demo1
atlas       2640    1162  0 22:12 pts/0    00:00:00 /home/atlas/workspace/fastapi-study/bin/python3 /home/atlas/workspace/fastapi-study/bin/gunicorn demo1:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornWorker
atlas       2641    2640  8 22:12 pts/0    00:00:40 /home/atlas/workspace/fastapi-study/bin/python3 /home/atlas/workspace/fastapi-study/bin/gunicorn demo1:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornWorker
atlas       2642    2640  8 22:12 pts/0    00:00:40 /home/atlas/workspace/fastapi-study/bin/python3 /home/atlas/workspace/fastapi-study/bin/gunicorn demo1:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornWorker
atlas       2645    2640 10 22:12 pts/0    00:00:47 /home/atlas/workspace/fastapi-study/bin/python3 /home/atlas/workspace/fastapi-study/bin/gunicorn demo1:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornWorker
atlas       2646    2640 11 22:12 pts/0    00:00:52 /home/atlas/workspace/fastapi-study/bin/python3 /home/atlas/workspace/fastapi-study/bin/gunicorn demo1:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornWorker
atlas       2665    2462  0 22:20 pts/6    00:00:00 grep demo1
$ wrk -t2 -c 100 -d 60s http://127.0.0.1:8000
Running 1m test @ http://127.0.0.1:8000
  2 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.13ms    3.38ms 112.09ms   88.85%
    Req/Sec    13.00k     1.44k   19.86k    71.58%
  1554274 requests in 1.00m, 200.11MB read
Requests/sec:  25859.47
Transfer/sec:      3.33MB
相关文章
|
21天前
|
人工智能 测试技术 API
构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用
本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。
372 6
|
1月前
|
存储 监控 安全
132_API部署:FastAPI与现代安全架构深度解析与LLM服务化最佳实践
在大语言模型(LLM)部署的最后一公里,API接口的设计与安全性直接决定了模型服务的可用性、稳定性与用户信任度。随着2025年LLM应用的爆炸式增长,如何构建高性能、高安全性的REST API成为开发者面临的核心挑战。FastAPI作为Python生态中最受青睐的Web框架之一,凭借其卓越的性能、强大的类型安全支持和完善的文档生成能力,已成为LLM服务化部署的首选方案。
|
3月前
|
JavaScript 前端开发 机器人
【Azure Bot Service】在中国区Azure上部署机器人的 Python 版配置
本文介绍了在中国区Azure上使用Python SDK配置Azure Bot Service时遇到的问题及解决方案,涵盖参数设置与适配器配置,适用于希望在Azure中国区部署Python机器人的开发者。
108 7
|
6月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
410 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
5月前
|
测试技术 Python
Python接口自动化测试中Mock服务的实施。
总结一下,Mock服务在接口自动化测试中的应用,可以让我们拥有更高的灵活度。而Python的 `unittest.mock`库为我们提供强大的支持。只要我们正确使用Mock服务,那么在任何情况下,无论是接口是否可用,都可以进行准确有效的测试。这样,就大大提高了自动化测试的稳定性和可靠性。
229 0
|
9月前
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
474 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
8月前
|
存储 算法 文件存储
探秘文件共享服务之哈希表助力 Python 算法实现
在数字化时代,文件共享服务不可或缺。哈希表(散列表)通过键值对存储数据,利用哈希函数将键映射到特定位置,极大提升文件上传、下载和搜索效率。例如,在大型文件共享平台中,文件名等信息作为键,物理地址作为值存入哈希表,用户检索时快速定位文件,减少遍历时间。此外,哈希表还用于文件一致性校验,确保传输文件未被篡改。以Python代码示例展示基于哈希表的文件索引实现,模拟文件共享服务的文件索引构建与检索功能。哈希表及其分布式变体如一致性哈希算法,保障文件均匀分布和负载均衡,持续优化文件共享服务性能。
|
8月前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
905 1
|
10月前
|
机器学习/深度学习 安全 PyTorch
FastAPI + ONNX 部署机器学习模型最佳实践
本文介绍了如何结合FastAPI和ONNX实现机器学习模型的高效部署。面对模型兼容性、性能瓶颈、服务稳定性和安全性等挑战,FastAPI与ONNX提供了高性能、易于开发维护、跨框架支持和活跃社区的优势。通过将模型转换为ONNX格式、构建FastAPI应用、进行性能优化及考虑安全性,可以简化部署流程,提升推理性能,确保服务的可靠性与安全性。最后,以手写数字识别模型为例,展示了完整的部署过程,帮助读者更好地理解和应用这些技术。
791 20
|
10月前
|
JSON 安全 中间件
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
431 15

推荐镜像

更多