我正在尝试调试使用 FastAPI (uvicorn) 的应用程序 (web api) 我也在使用诗歌并在 vscode 中设置 projev 虚拟环境。
我读这个教程设置uvicorn和这一个设置vscode但我认为我做的一套东西错了起来。
我尝试将 launch.json 设置为python: module和python: 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 应用程序? …
我正在尝试将 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 似乎没有返回任何内容。
我有一个通过 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)
它在 …
我正在尝试将 FastAPI 作为 Windows 服务运行。找不到任何文档或任何文章来将 Uvicorn 作为 Windows 服务运行。我也尝试使用 NSSM,但我的 Windows 服务停止了。
我承认我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) 我试图理解 uvicorn 的“backlog”标志和“limit-concurrency”标志之间的相互作用。来自文档(https://www.uvicorn.org/settings/)
积压:积压中保留的最大连接数。与大量传入流量相关。默认值:2048
limit-concurrency:在发出 HTTP 503 响应之前允许的最大并发连接或任务数。即使在资源过剩的负载下,也有助于确保已知的内存使用模式。
这两种描述似乎都独立有意义,具体取决于您如何解释“积压”一词。但我对他们如何相互作用感到困惑。
限制并发明确表示,如果超过打开连接的数量,那么它将抛出 503 错误,但默认为 2048 的积压似乎意味着 uvicorn 将保留 2048 个请求等待其他请求完成,这意味着它不会是503ing。
任何人都可以阐明这些设置吗?
我有一个应用程序在谷歌云的 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) 我正在学习 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运行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)