标签: uvicorn

--reload 标志不应在 Windows 上的生产中使用。Uvicorn服务器警告

我运行uvicorn main:app --reload来启动 FastAPI 服务器。服务器正在运行,但我在控制台上看到一条警告:

WARNING:  The --reload flag should not be used in production on Windows.
Run Code Online (Sandbox Code Playgroud)

下面是我的代码:

WARNING:  The --reload flag should not be used in production on Windows.
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我会看到这个?该警告的原因是什么?

webserver warnings python-3.x fastapi uvicorn

5
推荐指数
1
解决办法
5597
查看次数

Uvicorn 中使用 FastAPI 进行信号处理

我有一个使用Uvicornwith的应用程序FastAPI。我还打开了一些连接(例如到MongoDB)。SIGINT一旦出现某些信号( 、SIGTERM和) ,我想优雅地关闭这些连接SIGKILL

我的server.py文件:

import uvicorn
import fastapi
import signal
import asyncio

from source.gql import gql


app = fastapi.FastAPI()

app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"])
app.mount("/graphql", gql)

# handle signals
HANDLED_SIGNALS = (
    signal.SIGINT,
    signal.SIGTERM
)

loop = asyncio.get_event_loop()
for sig in HANDLED_SIGNALS:
    loop.add_signal_handler(sig, _some_callback_func)

if __name__ == "__main__":
    uvicorn.run(app, port=6900)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我尝试实现这一目标的方法不起作用。当我尝试Ctrl+C在终端中时,没有任何反应。我相信这是因为Uvicorn是在不同的线程中启动的......

这样做的正确方法是什么?我注意到了uvicorn.Server.install_signal_handlers()这个功能,但使用起来并不幸运......

python signals starlette fastapi uvicorn

5
推荐指数
1
解决办法
7578
查看次数

为什么 UVICORN/Starlette/FastAPI 在不使用“ASYNC”时会产生更多线程,而在使用“ASYNC”时却不会?

好的,所以我正在对 进行比较研究using ASYNC vs without using ASYNC in FastAPI。然而,我得到了一些意想不到的结果,并且不明白为什么。

这是设置 1:

不使用异步的 API

import uvicorn
from fastapi import FastAPI
import PIL.Image as Image
import requests
from loguru import logger
import sys

log_format = "{level} {process}-{thread} {time} {name}:{line} - {message}"
logger.remove()
logger.add(sys.stderr, format=log_format, backtrace=True, diagnose=True)
logger.add("logs/" + "t_{time}.log", format=log_format, colorize=True, backtrace=True, diagnose=True)

Image.MAX_IMAGE_PIXELS = None

def get_the_image_from_net():
    a = requests.get("https://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73751/world.topo.bathy.200407.3x21600x21600.A1.jpg")
    return True


app = FastAPI()

@app.get("/expectoPatronum")
def get_image_of_the_new_world():
    """
    Gets Image of the World
    """
    logger.info("Received request for getting …
Run Code Online (Sandbox Code Playgroud)

python python-asyncio starlette fastapi uvicorn

5
推荐指数
1
解决办法
6772
查看次数

ModuleNotFoundError:没有名为“httpx”的模块

安装正确的软件包后出现上述错误

Python --版本

Python 3.6.9

安装命令

pip3 安装 httpx

点 3 列表

anyio (3.6.1)
async-generator (1.10)
Brotli (1.0.9)
certifi (2022.6.15)
charset-normalizer (2.1.0)
contextvars (2.4)
dataclasses (0.8)
dnspython (2.2.1)
email-validator (1.2.1)
h11 (0.12.0)
httpcore (0.14.7)
httpx (0.22.0)
idna (3.3)
immutables (0.18)
MarkupSafe (2.0.1)
pip (9.0.1)
pkg-resources (0.0.0)
pydantic (1.9.1)
python-dateutil (2.8.2)
rfc3986 (1.5.0)
setuptools (39.0.1)
six (1.16.0)
sniffio (1.2.0)
typing-extensions (4.1.1)
validator (0.7.1)
Run Code Online (Sandbox Code Playgroud)

在虚拟环境交互式 shell 中,该包也可以正常工作

    (env) PEOPLE\saurabhkamble@lp7948:/var/www/vip_select_shaadi_api$ uvicorn main:app --reload
    INFO:     Will watch for changes in these directories: ['/var/www/vip_select_shaadi_api']
    INFO: …
Run Code Online (Sandbox Code Playgroud)

python-3.x fastapi uvicorn httpx

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

Uvicorn服务器超时

我正在尝试将我的服务器配置为请求超时,但我找不到有关它的任何信息。我看到uvicorn有一个名为 的属性keep_alive_timeout,默认为 5 秒。但这似乎也不起作用。

例如:

app = FastAPI()

@app.get('/test')
def test_endpoint():
    sleep(10)
Run Code Online (Sandbox Code Playgroud)

我希望请求在 5 秒后断开连接并超时,但它仍然存在并返回 200。

有人知道如何设置吗?

python rest server fastapi uvicorn

5
推荐指数
0
解决办法
9632
查看次数

uvicorn 在 AWS Fargate 上 1-2 分钟后关闭

我在 AWS Fargate 上使用 Python 3.10.1 和应用程序负载均衡器部署了 FastAPI 0.81.0 + uvicorn 0.18.3。服务器在我的本地 Docker 中无限期地运行(如预期),但是在 AWS 上,应用程序总是在 1-2 分钟后关闭。

这是 Docker 中的 uvicorn 调用:

CMD ["uvicorn", "--host", "0.0.0.0", "--port", "8000", "--log-level", "trace", "app.main:app"]
Run Code Online (Sandbox Code Playgroud)

我的 FastAPI 应用程序如下所示:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

app = FastAPI()
origins = [
    "*"
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

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

这可能与负载均衡器有关,因为我的 Fargate 服务的 RAM 使用率并不太高:

在此输入图像描述

通常的怀疑似乎是通过 TCP 而不是 HTTP 进行运行状况检查,但是据我所知,Fargate …

amazon-web-services aws-fargate aws-application-load-balancer fastapi uvicorn

5
推荐指数
1
解决办法
2209
查看次数

Uvicorn 工人如何工作?一台超薄机器需要多少工人?

我部署的应用程序是K8s下的FastAPI with Uvicorn。在尝试了解如何对应用程序进行 Docker 化时,我明白我想在没有 Gunicorn 的情况下实现 Uvicorn,并添加一个根据应用​​程序收到的请求负载进行扩展/缩减的系统。我做了很多负载测试,发现默认情况下有 1 个 Uvicorn 工作人员,我可以获得 3.5 RPS,而将工作人员更改为 8 个时,我可以轻松获得 22 RPS(没有检查更多,因为这对我来说效果很好) 。

现在,我对资源的期望是,我必须提供的 CPU 限制为 8(我假设每个工作人员在一个进程和线程上工作),但我只看到内存使用量增加,但大麦在CPU中。也许是因为应用程序不使用那么多的 CPU,但它确实有可能使用超过 1 个 CPU?到目前为止,它没有使用超过一个CPU。

Uvicorn 工人如何工作?我应该如何计算该应用程序需要多少工作人员?我没有找到任何有用的信息。

再说一次,我的目标是保持一台 1 个 cpu 的超薄机器,并具有自动缩放系统。 LOCUST 20 RPS 截图

Grafana CPU 使用情况截图

python worker asgi fastapi uvicorn

5
推荐指数
1
解决办法
4975
查看次数

Uvicorn reload :自动重新加载时杀死所有创建的子进程

我目前有一个使用 uvicorn 部署的 fastapi,它使用threading. 该线程是无限的(它是每 x 秒更新一次的例程)。在我更新到 python 3.10 之前,一切都工作正常,每次我更改代码时,服务器都会检测到更改并重新加载,在 init 处杀死并创建一个新线程。

但是现在,当我修改代码时,服务器会检测到更改并尝试重新加载,但创建的线程不会被终止(打印仍然继续在控制台中流动),从而避免服务器完全重新加载。

my print from my thread
WARNING:  StatReload detected changes in 'app\api.py'. Reloading...
INFO:     Shutting down
INFO:     Waiting for application shutdown.
INFO:     Application shutdown complete.
INFO:     Finished server process [3736]
my print from my thread
my print from my thread
...
Run Code Online (Sandbox Code Playgroud)

如果我在控制台中按 ctrl+C,则效果相同。线程保持活动状态 目前我的解决方案是kill PID每次我想刷新时都刷新,但这有点烦人。

我尝试回到 python 3.7.9 但问题仍然存在。我还尝试实施atexit并手动终止该进程,但没有成功。

有关如何正确处理此问题的任何线索?

python multithreading fastapi uvicorn

5
推荐指数
1
解决办法
1035
查看次数

“()”在python日志配置中有什么作用

我在uvicorn源代码中看到了一个 python dict 日志配置。

在那,他们将格式化程序定义为

{
    "default": {
        "()": "uvicorn.logging.DefaultFormatter",
        "fmt": "%(levelprefix)s %(asctime)s %(message)s",
        "datefmt": "%Y-%m-%d %H:%M:%S",

    },
    "access": {
        "()": "uvicorn.logging.AccessFormatter",
        "fmt": '%(levelprefix)s %(asctime)s :: %(client_addr)s - "%(request_line)s" %(status_code)s',
        "use_colors": True
    },
}
Run Code Online (Sandbox Code Playgroud)

此外,我们可以看到,他们定义了一个空的记录器(不知道我应该怎么称呼它),

"": {"handlers": ["default"], "level": "INFO"},
^^^^ - see, Empty key
Run Code Online (Sandbox Code Playgroud)

所以,这是我的问题,

  1. 什么是"()"在做格式化蟒蛇记录的部分?
  2. 什么是""在做伐木工人部分蟒蛇记录?

python python-3.x python-logging uvicorn

4
推荐指数
1
解决办法
267
查看次数

FastAPI uvicorn 不记录错误

我正在学习 fastapi,我正在本地主机上启动一个 uvicorn 服务器。每当出现错误/异常时,我都没有得到回溯。我得到的只是:INFO: 127.0.0.1:56914 - "POST /create/user/ HTTP/1.1" 500 Internal Server Error

所以,很难调试,我正在尝试python的日志模块

 import logging
 log = logging.getLogger("uvicorn")
 log.setLevel(logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)

我也试过用调试参数启动 uvicorn

if __name__ == "__main__":
    dev = 1
    print("printing")
    if dev == 1:
        uvicorn.run('main:app', host="127.0.0.1", port=5000, log_level="info", reload=True, debug=True)
    if dev == 2:
        uvicorn.run('main:app', host="127.0.0.1", port=5000, log_level="info", workers=2)


still the same problem persists. I am in development phase and I need to error traceback,please guide. 
Run Code Online (Sandbox Code Playgroud)

logging fastapi uvicorn

4
推荐指数
2
解决办法
2395
查看次数