标签: uvicorn

Django 3.x - 哪个 ASGI 服务器(Uvicorn vs. Daphne)

我有一个用 Django 3 编写的基于 API 的简单 Web 应用程序。在 Django 文档中有一个关于ASGI服务器的页面,并提到了两个选项:DaphneUvicorn。不幸的是,他们没有提供任何关于特定选择的好处的描述,所以在选择其中一个时我很困惑。

围绕这两者编写 Django 应用程序有何不同(如果有),是否有任何性能或稳定性问题需要注意?

基本上,使用 Uvicorn 代替 Daphne 有很大区别吗?如果这很重要,我的服务器正在 Ubuntu 上运行。

django daphne asgi uvicorn

14
推荐指数
1
解决办法
6394
查看次数

为什么我的 fastapi 或 uvicorn 会关闭?

我正在尝试运行一项使用简单变压器 Roberta 模型进行分类的服务。测试时,推理脚本/函数本身按预期工作。当我将其包含在快速 API 中时,它会关闭服务器。

\n
uvicorn==0.11.8\nfastapi==0.61.1\nsimpletransformers==0.51.6\ncmd : uvicorn --host 0.0.0.0 --port 5000 src.main:app\n
Run Code Online (Sandbox Code Playgroud)\n
\n
@app.get("/article_classify")\ndef classification(text:str):\n    """function to classify article using a deep learning model.\n    Returns:\n        [type]: [description]\n    """\n\n    _,_,result = inference(text)\n    return result\n
Run Code Online (Sandbox Code Playgroud)\n

错误 :

\n
INFO:     Started server process [8262]\nINFO:     Waiting for application startup.\nINFO:     Application startup complete.\nINFO:     Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)\nINFO:     127.0.0.1:36454 - "GET / HTTP/1.1" 200 OK\nINFO:     127.0.0.1:36454 - "GET /favicon.ico HTTP/1.1" 404 Not Found\nINFO:     127.0.0.1:36454 - "GET /docs HTTP/1.1" …
Run Code Online (Sandbox Code Playgroud)

python multilabel-classification fastapi uvicorn simpletransformers

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

Uvicorn/FastAPI 重复记录

我的 FastAPI 应用程序似乎将很多事情记录两次。

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [21360] using statreload
INFO:     Started server process [21362]
INFO:uvicorn.error:Started server process [21362]
INFO:     Waiting for application startup.
INFO:uvicorn.error:Waiting for application startup.
INFO:     Application startup complete.
INFO:uvicorn.error:Application startup complete.
^CINFO:     Shutting down
INFO:uvicorn.error:Shutting down
INFO:     Waiting for application shutdown.
INFO:uvicorn.error:Waiting for application shutdown.
INFO:     Application shutdown complete.
INFO:uvicorn.error:Application shutdown complete.
INFO:     Finished server process [21362]
INFO:uvicorn.error:Finished server process [21362]
INFO:     Stopping reloader process [21360]
Run Code Online (Sandbox Code Playgroud)

这包括引发的任何异常,您将获得整个堆栈跟踪两次。我看到一些答案建议删除 …

logging fastapi uvicorn

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

如何在多个端口上运行 FastAPI 应用程序?

我有一个 FastAPI 应用程序,正在使用 Uvicorn 以编程方式在端口 30000 上运行。现在我也想在端口 8443 上运行相同的应用程序。相同的应用程序需要在这两个端口上运行。我怎样才能在Python代码中做到这一点?

最小可重现代码:

from fastapi import FastAPI
import uvicorn

app = FastAPI()


@app.get("/healthcheck/")
def healthcheck():
    return 'Health - OK'

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

我想要类似的东西

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", ports=[30000,8443])
Run Code Online (Sandbox Code Playgroud)

说明:我的应用程序将在我的组织 Azure Kubernetes 服务上运行。在端口 30000 上运行的应用程序保留用于内部 HTTP 流量,在 8443 上运行的应用程序映射到 Kubernetes 服务的 443 以暴露给外部流量。

更多详细信息:我将从此应用程序创建一个 Docker 容器,其想法是包括

CMD ["python3", "app.py"]
Run Code Online (Sandbox Code Playgroud)

最后运行应用程序。我正在寻找一种解决方案,它可以提供更改 python 代码 () 的方法uvicorn.run(app, host="0.0.0.0", ports=[30000,8443]),也可以更改 Dockerfile 中的 CMD 命令,例如此 GitHub 问题评论-gunicorn -k …

python gunicorn docker fastapi uvicorn

14
推荐指数
3
解决办法
4万
查看次数

我在生产中需要有多少个 uvicorn 工人?

我的环境

  • 快速API
  • Gunicorn 和 Uvicorn 工人
  • AWS EC2 c5.2xlarge(8 个 vCPU)

文档

https://fastapi.tiangolo.com/deployment/server-workers/

问题

目前我在生产服务器中使用 24 个 Uvicorn 工作人员。(c5.2xlarge)

gunicorn main:app --workers 24 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80

我了解到一个进程在一个核心上运行。因此,如果我有 8 个进程,我可以利用整个核心(c5.2xlarge 的 vCpu == 8)

我很好奇在这种情况下,如果我的进程数超过 8 个,是否会有任何性能优势?

gunicorn fastapi uvicorn

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

使用 PyTest 进行测试时如何在后台启动 Uvicorn + FastAPI

我有一个用Uvicorn + FastAPI编写的 REST-API 应用程序

我想使用 PyTest 进行测试。

我想在开始测试时在夹具中启动服务器,因此当测试完成时,夹具将终止应用程序。

FastAPI 测试展示了如何测试 API 应用程序,

from fastapi import FastAPI
from starlette.testclient import TestClient

app = FastAPI()


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


client = TestClient(app)


def test_read_main():
    response = client.get("/")
    assert response.status_code == 200
    assert response.json() == {"msg": "Hello World"}
Run Code Online (Sandbox Code Playgroud)

这不会以通常的方式使服务器联机。似乎由 client.get 命令触发的特定功能是唯一运行的东西。

我找到了这些额外的资源,但我无法让它们为我工作:

https://medium.com/@hmajid2301/pytest-with-background-thread-fixtures-f0dc34ee3c46

如何将服务器作为 py.test 的夹具运行

您将如何从 PyTest 运行 Uvicorn+FastAPI 应用程序,以便它随着测试而上升和下降?

python testing pytest fastapi uvicorn

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

Gunicorn uvicorn worker.py 如何遵守 limit_concurrency 设置

FastAPI 使用 Gunicorn 启动 uvicorn 工作程序,如https://www.uvicorn.org/settings/中所述

但是,gunicorn 不允许使用自定义设置启动 uvicorn,如https://github.com/encode/uvicorn/issues/343中所述

该问题建议覆盖源文件中的 config_kwargs,例如https://github.com/encode/uvicorn/blob/master/uvicorn/workers.py

limit_concurrency我们尝试过,但 uvicorn 不遵守源中多个 uvicorn 文件中的设置:

https://github.com/encode/uvicorn/blob/master/uvicorn/workers.py

# fail

        config_kwargs = {
            "app": None,
            "log_config": None,
            "timeout_keep_alive": self.cfg.keepalive,
            "timeout_notify": self.timeout,
            "callback_notify": self.callback_notify,
            "limit_max_requests": self.max_requests, "limit_concurrency": 10000,
            "forwarded_allow_ips": self.cfg.forwarded_allow_ips,
        }

Run Code Online (Sandbox Code Playgroud)

https://github.com/encode/uvicorn/blob/master/uvicorn/main.py

# fail

    kwargs = {
        "app": app,
        "host": host,
        "port": port,
        "uds": uds,
        "fd": fd,
        "loop": loop,
        "http": http,
        "ws": ws,
        "lifespan": lifespan,
        "env_file": env_file,
        "log_config": LOGGING_CONFIG if log_config is None else log_config,
        "log_level": log_level,
        "access_log": …
Run Code Online (Sandbox Code Playgroud)

concurrency gunicorn fastapi uvicorn concurrency-limits

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

如何在 FastAPI 应用程序中发送操作进度?

我已经部署了一个 fastapi 端点,

from fastapi import FastAPI, UploadFile
from typing import List

app = FastAPI()

@app.post('/work/test')
async def testing(files: List(UploadFile)):
    for i in files:
        .......
        # do a lot of operations on each file

        # after than I am just writing that processed data into mysql database
        # cur.execute(...)
        # cur.commit()
        .......
    
    # just returning "OK" to confirm data is written into mysql
    return {"response" : "OK"}
Run Code Online (Sandbox Code Playgroud)

我可以从 API 端点请求输出,它对我来说工作得很好。

现在,对我来说最大的挑战是知道每次迭代需要多少时间。因为在 UI 部分(那些访问我的 API 端点的人)我想帮助他们为正在处理的每个迭代/文件显示一个进度条(TIME TAKEN)。

我有什么可能的方法来实现它吗?如果是这样,请帮助我了解如何进一步处理?

谢谢你。

python api python-3.x fastapi uvicorn

13
推荐指数
2
解决办法
2613
查看次数

如何禁用 Uvicorn 的日志记录?

我正在开发 FastAPI - Uvicorn。我想禁用 uvicorn 的日志记录。我只需要服务器记录的日志。

日志档案

我参考了这个博客并实现了日志记录。

python logging alembic fastapi uvicorn

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

当 *.py 文件以外的文件发生更改时,如何重新加载 FastAPI 应用程序?

我希望我的 FastAPI 应用程序在出现以下情况时重新加载.csv我希望我的 FastAPI 应用程序在同一目录中的文件发生更改

我尝试了以下命令,但它不起作用。

uvicorn main:app --reload --reload-include *.csv
Run Code Online (Sandbox Code Playgroud)

有谁知道这个问题的解决方案?

fastapi uvicorn

13
推荐指数
1
解决办法
7194
查看次数