标签: uvicorn

在 VSCode 中调试 FastAPI 应用程序

我正在尝试调试使用 FastAPI (uvicorn) 的应用程序 (web api) 我也在使用诗歌并在 vscode 中设置 projev 虚拟环境。

我读这个教程设置uvicorn和这一个设置vscode但我认为我做的一套东西错了起来。

我尝试将 launch.json 设置为python: modulepython: current file

问题似乎是当我运行调试时它无法识别项目结构原因,它在带有此错误的导入语句中停止:

Exception has occurred: ImportError
attempted relative import with no known parent package
Run Code Online (Sandbox Code Playgroud)

这是我当前的 launch.json 配置:

"configurations": [
    {
        "name": "Python: local debug",
        "type": "python",
        "request": "launch",
        "program": "${workspaceFolder}/src/topic_service/service/__init__.py",
        "args" : ["--port", "8000"]
    },
]
Run Code Online (Sandbox Code Playgroud)

我还尝试添加一个 .env 文件设置 PYTHONPATH:

PYTHONPATH=.:${PYTHONPATH}
Run Code Online (Sandbox Code Playgroud)

我在本地运行应用程序如下:

poetry run uvicorn src.main:app --port 8080 --reload
Run Code Online (Sandbox Code Playgroud)

有谁知道如何正确设置 vscode 来调试 uvicorn 应用程序? …

visual-studio-code fastapi uvicorn

8
推荐指数
4
解决办法
9148
查看次数

姜戈 + 独角兽

我正在尝试将 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 django uvicorn

8
推荐指数
1
解决办法
1769
查看次数

使用 Starlette 和 Uvicorn 进行 Python 日志记录时文件句柄过多(在 lsof 上)

我有一个通过 uvicorn 运行的最小 starlette 应用程序,除了返回一个 ping 什么都不做。奇怪的是,即使只有一个线程,我的日志文件也有 45 个文件句柄。句柄随着对应用程序的点击而增加,并在 45 处保持平稳。我正在使用 lsof 计算文件句柄:

lsof | grep kml-bkny.log
Run Code Online (Sandbox Code Playgroud)

当然,这是最小的再生产。实际上,我的整个应用程序正在生成数千个文件句柄。一些(~200)我希望给定线程*控制器模块。但是,我无法解释在何处创建了数千个文件句柄。在我的实际程序中,它们也不会停滞不前,它们会永远增长。

这是我的应用程序(api.py):

import logging

from starlette.applications import Starlette
from starlette.responses import JSONResponse

logger = logging.getLogger("kml")
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler('/tmp/kml-bkny.log')
logger.addHandler(handler)

def controller_ping(request):
    try:
        logger.debug("Received /ping request")
        return JSONResponse({}, status_code=200)
    except Exception as e:
        logger.error(e)
        return JSONResponse({}, status_code=500)

app = Starlette()
app.add_route(path='/kml/ping', methods=['GET'], route=controller_ping)
Run Code Online (Sandbox Code Playgroud)

我在命令行上运行它,如下所示:

uvicorn api:app
Run Code Online (Sandbox Code Playgroud)

我使用一个简单的脚本测试应用程序:

import time
import requests

while True:
    time.sleep(1)
    for _ in range(10):
        r = requests.get(f'http://localhost:8000/kml/ping', timeout=5)
Run Code Online (Sandbox Code Playgroud)

它在 …

python logging lsof starlette uvicorn

8
推荐指数
0
解决办法
280
查看次数

FastAPI 作为 Windows 服务

我正在尝试将 FastAPI 作为 Windows 服务运行。找不到任何文档或任何文章来将 Uvicorn 作为 Windows 服务运行。我也尝试使用 NSSM,但我的 Windows 服务停止了。

python windows-services nssm fastapi uvicorn

8
推荐指数
2
解决办法
2万
查看次数

Traceback 中的 HTTP 方法无效:Uvicorn

我正在使用 uvicorn 0.11.8 和 fastapi 0.61.1。我的应用程序托管在 VPS 中。当我在本地服务器中运行该应用程序时,此类错误无法重现。它显示正确的消息 404 未找到方法不可用,但我无法弄清楚 VPS 中导致此问题的原因(回溯中的错误)。 在此输入图像描述

python linode digital-ocean fastapi uvicorn

8
推荐指数
1
解决办法
1万
查看次数

FastAPI:ModuleNotFoundError:没有名为“uvicorn”的模块

我承认我gunicorn以前从未使用过。当我运行命令时gunicorn main:app -k uvicorn.workers.UvicornWorker出现错误:

Error: class uri 'uvicorn.workers.UvicornWorker' invalid or not found: 

[Traceback (most recent call last):
  File "/Users/AdnanAhmad/Data/anaconda3/lib/python3.7/site-packages/gunicorn/util.py", line 135, in load_class
    mod = import_module('.'.join(components))
  File "/Users/X/Data/anaconda3/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, …
Run Code Online (Sandbox Code Playgroud)

python gunicorn fastapi uvicorn

8
推荐指数
1
解决办法
6万
查看次数

Uvicorn 积压与限制并发

我试图理解 uvicorn 的“backlog”标志和“limit-concurrency”标志之间的相互作用。来自文档(https://www.uvicorn.org/settings/

积压:积压中保留的最大连接数。与大量传入流量相关。默认值:2048

limit-concurrency:在发出 HTTP 503 响应之前允许的最大并发连接或任务数。即使在资源过剩的负载下,也有助于确保已知的内存使用模式。

这两种描述似乎都独立有意义,具体取决于您如何解释“积压”一词。但我对他们如何相互作用感到困惑。

限制并发明确表示,如果超过打开连接的数量,那么它将抛出 503 错误,但默认为 2048 的积压似乎意味着 uvicorn 将保留 2048 个请求等待其他请求完成,这意味着它不会是503ing。

任何人都可以阐明这些设置吗?

asgi uvicorn

8
推荐指数
1
解决办法
3427
查看次数

Google 云日志记录将 python INFO 消息显示为错误

我有一个应用程序在谷歌云的 Kubernetes 中运行。该应用程序是使用 fastapi 用 python 编写的。来自该应用程序的日志通过谷歌云日志记录可见,但是它们的“服务器性”似乎被错误地翻译:虽然 fastapi 的访问日志正确地以“INFO”严重性写入,但从自定义记录器写入的任何消息都会显示为错误,即使它们是写入的通过logger.info电话。

我通过命令行选项将以下日志记录配置传递给 uvicorn --log-config

{
  "version": 1,
  "disable_existing_loggers": false,
  "formatters": {
    "simple": {
      "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    },
    "default": {
      "()": "uvicorn.logging.DefaultFormatter",
      "datefmt": "%Y-%m-%dT%H:%M:%S",
      "format": "[%(asctime)s.%(msecs)04dZ] %(name)s %(levelprefix)s %(message).400s"
    },
    "access": {
      "()": "uvicorn.logging.AccessFormatter",
      "datefmt": "%Y-%m-%dT%H:%M:%S",
      "format": "[%(asctime)s.%(msecs)04dZ] %(name)s %(levelprefix)s %(message)s"
    }
  },
  "handlers": {
    "default": {
      "formatter": "default",
      "class": "logging.StreamHandler",
      "stream": "ext://sys.stderr"
    },
    "access": {
      "formatter": "access",
      "class": "logging.StreamHandler",
      "stream": "ext://sys.stdout"
    }
  },
  "loggers": …
Run Code Online (Sandbox Code Playgroud)

python google-cloud-logging fastapi uvicorn

8
推荐指数
1
解决办法
1792
查看次数

如何在 Jupyter 中运行 FastAPI 应用程序?

我正在学习 FastAPI,我有这个例子。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}
Run Code Online (Sandbox Code Playgroud)

我将脚本保存为main.ipynb

该教程说在命令行中运行这行代码:uvicorn main:app --reload

我收到此错误:

(venv) PS C:\Users\xxx\Desktop\Python Yamed\SaadAPI> uvicorn main:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [21304] using WatchFiles
ERROR:    Error loadinimport module "main".INFO:     Stopping reloader process [21304]
Run Code Online (Sandbox Code Playgroud)

原因是因为我使用的.ipynb是与.py.

使用 .ipynb 时如何修复此错误。

非常感谢

python jupyter-notebook fastapi uvicorn

8
推荐指数
1
解决办法
6877
查看次数

FastAPI Gunicorn Uvicorn 用于使用 Google Cloud Run 进行生产部署(压力测试)

在这里我想问你,用python运行gunicorn uvicorn和从tiangolo默认运行有什么区别?

我尝试使用JMeter线程属性对这些进行压力测试:

截图来自2021-02-18 12-29-26

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

截图来自 2021-02-18 12-20-05

从上面我尝试过:

  1. 带有 tiangolo 基础的 Dockerfile
  2. 使用 python:3.8-slim-buster 的 Dockerfile 并使用 gunicorn 命令运行它
  3. 使用 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
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)

stress-testing gunicorn fastapi uvicorn

7
推荐指数
2
解决办法
4982
查看次数