标签: uvicorn

FastAPI 如何修复错误行走文件系统:OSError [Errno 40] 符号链接级别过多:'/sys/class/vtconsole/vtcon0/subsystem?

我有 FastAPI (Python) 和 uvicorn[标准]。我有这个错误:

error walking file system: OSError [Errno 40] Too many levels of symbolic links: '/sys/class/vtconsole/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0/subsystem/vtcon0'
Run Code Online (Sandbox Code Playgroud)

如果我只使用 uvicorn,一切都可以,但我需要 uvicorn[standard]。如何修复它?

我在 Docker 中使用它。

python docker fastapi uvicorn

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

使用 FastAPI 计算全局变量的请求数

我想统计特定 URL 路径中的请求数。

app = FastAPI()
counter = 0

@app.get("/do_something")
async def do_something():
    global counter
    counter += 1
    return {"message": "Hello World"}
Run Code Online (Sandbox Code Playgroud)

这段代码可以吗?计数器应该是线程安全的?阿辛西奥安全吗?这是计算请求的正确方法(没有数据库)吗?在这种情况下,“do_something”函数中的“async”有含义吗?以及如何让它与多个工人一起工作?

python python-asyncio asgi fastapi uvicorn

6
推荐指数
2
解决办法
5095
查看次数

未找到 'uvloop>=0.14.0' 发行版,这是 uvicorn 所需要的

我是学习 FastAPI 的新手,一开始就陷入困境。我不断收到以下错误:

(venv) root@Xue:/home/proyectos/FastAPI# uvicorn main.py:app --reload
Traceback (most recent call last):
  File "/usr/bin/uvicorn", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3254, in <module>
    def _initialize_master_working_set():
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3237, in _call_aside
    f(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 3266, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 584, in _build_master
    ws.require(__requires__)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 901, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 787, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'uvloop>=0.14.0' distribution was not found …
Run Code Online (Sandbox Code Playgroud)

python uvloop fastapi uvicorn

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

FastAPI中如何正确使用ApScheduler?

from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nimport uvicorn\nimport time\nfrom loguru import logger\nfrom apscheduler.schedulers.background import BackgroundScheduler\n\napp = FastAPI()\napp.add_middleware(\n    CORSMiddleware,\n    allow_origins=["*"],\n    allow_credentials=True,\n    allow_methods=["*"],\n    allow_headers=["*"],\n)\n\ntest_list = ["1"]*10\n\ndef check_list_len():\n    global test_list\n    while True:\n        time.sleep(5)\n        logger.info(f"check_list_len\xef\xbc\x9a{len(test_list)}")\n\n@app.on_event('startup')\ndef init_data():\n    scheduler = BackgroundScheduler()\n    scheduler.add_job(check_list_len, 'cron', second='*/5')\n    scheduler.start()\n\n@app.get("/pop")\nasync def list_pop():\n    global test_list\n    test_list.pop(1)\n    logger.info(f"current_list_len:{len(test_list)}")\n\n\nif __name__ == '__main__':\n    uvicorn.run(app="main3:app", host="0.0.0.0", port=80, reload=False, debug=False)\n
Run Code Online (Sandbox Code Playgroud)\n

上面是我的代码,我想通过get请求取出一个列表元素,并设置一个周期性任务不断检查列表中的元素数量,但是当我运行时,总是出现以下错误:

\n
Execution of job "check_list_len (trigger: cron[second='*/5'], next run at: 2021-11-25 09:48:50 CST)" skipped: maximum number of running instances reached (1)\n2021-11-25 09:48:50.016 | INFO     | …
Run Code Online (Sandbox Code Playgroud)

python-3.x apscheduler fastapi uvicorn

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

多个工作人员不处理并发请求

我正在使用 EC2 AWS 实例中托管的 FastAPI。

EC2 实例规格(g4dn.xlarge):16 GB 内存,4 个 CPU,GPU:NVIDIA T4

我正在对该应用程序进行压力测试。如果我向应用程序同时发送 10 个 POST 请求,则只有 5 个请求同时(完全相同的时间)得到处理,而其他请求则在不同的时间(几秒钟后)一一处理。

配置如下

gunicorn main:app --workers 9 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80
Run Code Online (Sandbox Code Playgroud)

workers根据这个公式,我已将 9 设置为 9The suggested maximum concurrent requests when using workers and threads is (2*CPU)+1.

鉴于上述配置,我希望能够同时处理所有 10 个请求。

对于 9 个工作人员,即使我清理了缓存,我也会遇到 CUDA 内存不足错误。

有 3 个工作人员时,我不会遇到 CUDA 问题,但同时处理的请求只有 3 个,仅此而已。其余的将在几秒钟后一一处理。

python multithreading gunicorn fastapi uvicorn

6
推荐指数
0
解决办法
776
查看次数

Uvicorn 不会用 CTRL+C 退出

我有一个使用 uvicorn 的 Python FastAPI 应用程序。我把它打包在 docker 容器中。当我使用如下命令运行应用程序(在 Windows 10 计算机上的 Power Shell 中)时:docker run -p 8080:8080 my-image-name我收到以下 uvicorn 启动文本:

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
Run Code Online (Sandbox Code Playgroud)

当我按CTRL+C杀死该应用程序时,什么也没有发生。我总是最终不得不关闭终端才能让它停止。

这是因为它在 docker 容器中运行吗?

我知道我可以在分离模式 ( ) 下运行容器-d,但有时我想在容器日志发生时观察它们。

如何终止 docker 映像和 uvicorn 进程并保持终端仍在运行?

sigterm docker uvicorn

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

FastAPI / uvicorn(或 hypercorn):我的根路径在哪里?

基于一些 FastAPI 教程(包括本教程),我制作了一个简单的 FastAPI 应用程序:

from fastapi import FastAPI, Request
app = FastAPI() # also tried FastAPI(root_path="/api/v1")

@app.get("/app")
def read_main(request: Request):
    return {"message": "Hello World", "root_path": request.scope.get("root_path")}
Run Code Online (Sandbox Code Playgroud)

我想在 root 以外的路径(例如 /api/vi)...再次基于大多数教程和常识,我尝试以以下方式启动它:

uvicorn main:app --root-path /api/v1
Run Code Online (Sandbox Code Playgroud)

服务正常(在http://127.0.0.1:8000),但是,root-path似乎被忽略:任何GET请求都会http://127.0.0.1:8000/给出:

message "Hello World"
root_path   "/api/v1"
Run Code Online (Sandbox Code Playgroud)

以及任何GET要求http://127.0.0.1:8000/api/v1提供:

detail  "Not Found"
Run Code Online (Sandbox Code Playgroud)

我希望这些请求会产生相反的结果......这是怎么回事?!?

我还尝试初始化 FastAPIFastAPI(root_path="/api/v1")以及切换到 hypercorn 但无济于事...

应用程序版本的详细信息(我可能也尝试过其他一些应用程序,尽管这些应该是最新尝试的):

python                    3.9.7           hf930737_3_cpython    conda-forge
fastapi                   0.85.1             pyhd8ed1ab_0    conda-forge
uvicorn                   0.20.0           py39h06a4308_0  
hypercorn                 0.14.3           py39hf3d152e_1    conda-forge
Run Code Online (Sandbox Code Playgroud)

python fastapi uvicorn hypercorn

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

Uvicorn 服务器意外关闭

我正在使用由 Uvicorn 服务器提供服务的 FastAPI 框架。我的应用程序应该在给定的端点 (/run) 上运行一些耗时的数值计算。为此,我使用来自 fastAPI 的“background_task”(基本上是来自 Starlette 的“background_task”)。

运行应用程序时,经过一段时间的正常行为后,服务器由于某种原因关闭。

应用程序的日志如下所示:

INFO: Started server process [922]
INFO: Waiting for application startup.
DEBUG: None - ASGI [1] Started
DEBUG: None - ASGI [1] Sent {'type': 'lifespan.startup'}
DEBUG: None - ASGI [1] Received {'type': 'lifespan.startup.complete'}
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
DEBUG: ('10.0.2.111', 57396) - Connected
DEBUG: ('10.0.2.111', 57397) - Connected
DEBUG: ('10.0.2.111', 57396) - ASGI [2] Started
DEBUG: ('10.0.2.111', 57396) - ASGI [2] Received {'type': 'http.response.start', …
Run Code Online (Sandbox Code Playgroud)

python-3.x starlette fastapi uvicorn

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

如何使用 Uvicorn 网络服务器运行 Django?

我有一个 Django 项目在我的本地机器上运行,带有开发服务器manage.py runserver,我试图在将它部署到虚拟机之前用 Uvicorn 运行它。因此,在我的虚拟环境中,我安装uvicorn并启动了服务器,但如下所示,它无法找到 Django 静态 css 文件。

(envdev) user@lenovo:~/python/myproject$ uvicorn myproject.asgi:application --port 8001
Started server process [17426]

Waiting for application startup.
ASGI 'lifespan' protocol appears unsupported.
Application startup complete.
Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit)

INFO:     127.0.0.1:45720 - "GET /admin/ HTTP/1.1" 200 OK
Not Found: /static/admin/css/base.css
Not Found: /static/admin/css/base.css
INFO:     127.0.0.1:45720 - "GET /static/admin/css/base.css HTTP/1.1" 404 Not Found
Not Found: /static/admin/css/dashboard.css
Not Found: /static/admin/css/dashboard.css
INFO:     127.0.0.1:45724 - "GET /static/admin/css/dashboard.css HTTP/1.1" 404 …
Run Code Online (Sandbox Code Playgroud)

python django uvicorn

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

如何从 Poetry 运行 FastAPI 应用程序?

我有一个由诗歌构建的 fastapi 项目。我想在 pyproject.tom 中使用脚本部分运行应用程序,如下所示:

poetry run start
Run Code Online (Sandbox Code Playgroud)

该部分中的双引号内是什么?

[tool.poetry.scripts]
start = ""
Run Code Online (Sandbox Code Playgroud)

我尝试运行以下脚本。

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

def main():
    print("Hello World")
    uvicorn.run(app, host="0.0.0.0", port=8000, reload=True, workers=2)

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

它停止应用程序并只显示这样的警告。

警告:您必须将应用程序作为导入字符串传递以启用“重新加载”或“工人”。

python-poetry fastapi uvicorn

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