我正在尝试运行一项使用简单变压器 Roberta 模型进行分类的服务。测试时,推理脚本/函数本身按预期工作。当我将其包含在快速 API 中时,它会关闭服务器。
\nuvicorn==0.11.8\nfastapi==0.61.1\nsimpletransformers==0.51.6\ncmd : uvicorn --host 0.0.0.0 --port 5000 src.main:app\nRun Code Online (Sandbox Code Playgroud)\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\nRun Code Online (Sandbox Code Playgroud)\n错误 :
\nINFO: 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
我的 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)
这包括引发的任何异常,您将获得整个堆栈跟踪两次。我看到一些答案建议删除 …
我有一个 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 …
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 个,是否会有任何性能优势?
我有一个用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
您将如何从 PyTest 运行 Uvicorn+FastAPI 应用程序,以便它随着测试而上升和下降?
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) 我已经部署了一个 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)。
我有什么可能的方法来实现它吗?如果是这样,请帮助我了解如何进一步处理?
谢谢你。
我希望我的 FastAPI 应用程序在出现以下情况时重新加载.csv我希望我的 FastAPI 应用程序在同一目录中的文件发生更改
我尝试了以下命令,但它不起作用。
uvicorn main:app --reload --reload-include *.csv
Run Code Online (Sandbox Code Playgroud)
有谁知道这个问题的解决方案?