我一直在修改 Flask 和 FastAPI 以了解它如何充当服务器。
我想知道的主要事情之一是 Flask 和 FastAPI 如何处理来自多个客户端的多个请求。
特别是当代码有效率问题时(数据库查询时间长)。
所以,我尝试制作一个简单的代码来理解这个问题。
代码很简单,当客户端访问路由时,应用程序休眠10秒才返回结果。
它看起来像这样:
快速API
import uvicorn
from fastapi import FastAPI
from time import sleep
app = FastAPI()
@app.get('/')
async def root():
print('Sleeping for 10')
sleep(10)
print('Awake')
return {'message': 'hello'}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)
Run Code Online (Sandbox Code Playgroud)
烧瓶
from flask import Flask
from flask_restful import Resource, Api
from time import sleep
app = Flask(__name__)
api = Api(app)
class Root(Resource):
def get(self):
print('Sleeping for 10')
sleep(10)
print('Awake')
return {'message': 'hello'}
api.add_resource(Root, …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Django 3.0 与 Uvicorn 一起使用并在开始时得到它:
INFO: Started server process [96219]
INFO: Waiting for application startup.
INFO: ASGI 'lifespan' protocol appears unsupported.
INFO: Application startup complete.
Run Code Online (Sandbox Code Playgroud)
我可以用--lifespan off标志关闭生命周期,但是有没有办法让它与 Django 一起工作?快速搜索 Django + lifespan 似乎没有返回任何内容。
在这里我想问你,用python运行gunicorn uvicorn和从tiangolo默认运行有什么区别?
我尝试使用JMeter线程属性对这些进行压力测试:

从这些,我得到了结果::

从上面我尝试过:
这是我的案例 1(Tiangolo 基础)的 Dockerfile:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8-slim
RUN apt-get update && apt-get install wget gcc -y
RUN mkdir -p /app
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
RUN python -m pip install --upgrade pip
RUN pip install --no-cache-dir -r /app/requirements.txt
COPY . /app
Run Code Online (Sandbox Code Playgroud)
这是我的 Dockerfile 案例 2(带有 gunicorn 命令的 Python 基础):
FROM python:3.8-slim-buster as builder
RUN apt-get update …Run Code Online (Sandbox Code Playgroud)