【发布时间】:2021-05-21 01:48:20
【问题描述】:
这里想问一下,用python运行gunicorn uvicorn,和默认从tiangolo有什么区别?
我尝试使用带有线程属性的JMeter 对这些进行压力测试:
从这些,我得到了结果::
从上面我试过了:
- 带有 tiangolo 基础的 Dockerfile
- 带有 python:3.8-slim-buster 的 Dockerfile 并使用 gunicorn 命令运行它
- 使用 python:3.8-slim-buster 的 Dockerfile 并使用 python 运行它
这是案例 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
这是我的案例 2 的 Dockerfile(带有 gunicorn 命令的 Python 库):
FROM python:3.8-slim-buster as builder
RUN apt-get update --fix-missing
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y libgl1-mesa-dev python3-pip git
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip3 install -U setuptools
RUN pip3 install --upgrade pip
RUN pip3 install -r ./requirements.txt
COPY . /usr/src/app
ENTRYPOINT gunicorn --bind :8080 --workers 1 --threads 8 main:app --worker-class uvicorn.workers.UvicornH11Worker --preload --timeout 60 --worker-tmp-dir /dev/shm
这是我的案例 3 的 Dockerfile(带有 python 命令的 Python 基础):
FROM python:3.8-slim-buster
RUN apt-get update --fix-missing
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y libgl1-mesa-dev python3-pip git
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip3 install -U setuptools
RUN pip3 install --upgrade pip
RUN pip3 install -r ./requirements.txt --use-feature=2020-resolver
COPY . /usr/src/app
CMD ["python3", "/usr/src/app/main.py"]
这里我很困惑,从上面的结果看起来它们的结果几乎相同,上面三种方法有什么区别?哪一个最适合生产?对不起,我是生产部署 API 的新手。我需要一些关于这个案子的建议。谢谢
这是我的 Cloud Run 命令
gcloud builds submit --tag gcr.io/gaguna3/priceengine
gcloud run deploy backend-pure-python \
--image="gcr.io/gaguna3/priceengine" \
--region asia-southeast2 \
--allow-unauthenticated \
--platform managed \
--memory 4Gi \
--cpu 2 \
--timeout 900 \
--project=gaguna3
【问题讨论】:
-
如果您在本地环境中运行这些测试,您是否收到相同的性能差异?
-
@JanHernandez 当我在本地尝试时,它仍然得到相同的结果
-
请直接运行单个 Uvicorn worker 进行测试,而不是通过 gunicorn 运行它。我觉得这最适合 Cloud Run 的工作方式。
标签: gunicorn fastapi stress-testing uvicorn