我尝试使用 uvicorn 网络服务器运行 FastAPI,但它引发了错误。
我运行这个命令,
uvicorn api:app --reload --host 0.0.0.0
但是终端有错误。
Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Started reloader process [23445]
Error loading ASGI app. Could not import module "api".
Stopping reloader process [23445]
Run Code Online (Sandbox Code Playgroud)
我真的很感激任何建议或建议
我目前正在 Django 中开发一个服务,它使用一个缓慢的外部 API(需要大约 10 秒才能获得响应),这意味着与我的服务器的连接保持打开状态,等待外部 API 响应,并占用工作时间/资源。
我知道我可以使用 gunicorn 的线程或 gevent 工作人员来添加并发性,但似乎无法掌握将 gunicorn 与 gevent 工作人员一起使用和将 uvicorn(或任何其他服务器)与 asgi 接口一起使用之间的确切区别。
使用其中一种的标准是什么?
Django 仍然不完全支持 async/await 视图。如果我坚持使用 gevent 工人会更好吗?
晚上好,
\n我正在使用 python 3.9 并尝试根据互联网上的文档在 Windows 10 Pro 上运行新的 FastAPI 服务https://www.uvicorn.org/我执行了以下语句
\npip install uvicorn pip install uvicorn[standard]\nRun Code Online (Sandbox Code Playgroud)\n创建示例文件 app.py
\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get("/")\nasync def root():\n return {"message": "Hello World"}\nRun Code Online (Sandbox Code Playgroud)\n但是当我运行下面的代码时:
\nuvicorn main:app --reload\n\n\nuvicorn : The term \'uvicorn\' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify t\nhat the path is correct …Run Code Online (Sandbox Code Playgroud) 在处理 FastAPI 请求时,我有一个受 CPU 限制的任务要对列表的每个元素执行。我想在多个 CPU 内核上进行此处理。
在 FastAPI 中执行此操作的正确方法是什么?我可以使用标准multiprocessing模块吗?到目前为止,我发现的所有教程/问题仅涵盖 I/O 绑定任务,如 Web 请求。
FastAPI 和 uvicorn 的新手,但我想知道为什么当我通过从命令行使用 uvicorn 启动它来运行我的“hello world”服务时,它工作正常,但是当从我的服务内部使用“uvicorn.run”方法时,服务启动,但是当我发送 GET 时,我总是得到一个404响应正文为{"detail": "Not Found"}?
这是我的代码:
import uvicorn
from fastapi import FastAPI
app = FastAPI()
uvicorn.run(app, host="127.0.0.1", port=5049)
@app.get("/")
async def root():
return {"message": "Hello World"}
Run Code Online (Sandbox Code Playgroud)
总是返回 404,如下所示:
# curl http://127.0.0.1:5049/
{"detail":"Not Found"}
Run Code Online (Sandbox Code Playgroud)
我的服务的输出显示:
INFO: Started server process [28612]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:5049 (Press CTRL+C to quit)
INFO: 127.0.0.1:55446 - "GET / HTTP/1.1" 404 Not Found
Run Code Online (Sandbox Code Playgroud)
如果我注释掉“uvicorn.run”行,然后从命令行启动该服务(在 Windows 10 上运行): …
我正在使用 FastAPI 在 python 中创建一个服务器,并且我想要一个与我的 API 无关的函数,每 5 分钟在后台运行一次(例如从 API 检查内容并根据响应打印内容)
我尝试创建一个运行该函数的线程start_worker,但它不打印任何内容。
有谁知道该怎么做?
def start_worker():
print('[main]: starting worker...')
my_worker = worker.Worker()
my_worker.working_loop() # this function prints "hello" every 5 seconds
if __name__ == '__main__':
print('[main]: starting...')
uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)
_worker_thread = Thread(target=start_worker, daemon=False)
_worker_thread.start()
Run Code Online (Sandbox Code Playgroud) 所以我已经想出了如何编写 fastAPI 并且我准备将我的脚本部署到我使用过 fastAPI ( https://fastapi.tiangolo.com/ ) 的heroku但是问题是当我向 heroku 发出请求时它只会返回:
<html>
<head>
<title>Internal Server Error</title>
</head>
<body>
<h1><p>Internal Server Error</p></h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这意味着脚本已打开,但我看不到错误,并且我会说在本地它完全正常。
我无法看到问题所在的任何日志,但是我想说我的问题可能是我不确定我的procfile是否正确,因为我根本没有编辑它而且我对此很陌生,我在这里请问我如何能够在heroku中运行我的fastapi脚本?
我所知道的是,为了能够运行脚本,您必须使用命令uvicorn main:app --reload,如果您这样做,它将无法工作等py main.py我做错了什么?
我正在尝试使用 SSL 运行 fastapi 应用程序。
我正在使用 uvicorn 运行该应用程序。
我可以使用 HTTP 在端口 80 上运行服务器,
if __name__ == '__main__':
uvicorn.run("main:app", port=80, host='0.0.0.0', reload = True, reload_dirs = ["html_files"])
Run Code Online (Sandbox Code Playgroud)
要使用 HTTPS 运行端口,我执行以下操作:
if __name__ == '__main__':
uvicorn.run("main:app", port=443, host='0.0.0.0', reload = True, reload_dirs = ["html_files"], ssl_keyfile="/etc/letsencrypt/live/my_domain/privkey.pem", ssl_certfile="/etc/letsencrypt/live/my_domain/fullchain.pem")
Run Code Online (Sandbox Code Playgroud)
我如何运行两者或简单地集成 https 重定向?
注意:这是在我不想使用 nginx 的服务器上进行的设置,我知道如何使用 nginx 来实现 https 重定向。
我应该使用 FastAPI。我被告知 FastAPI 与 Uvicorn 一起使用。Uvicorn到底是什么。我不知道 uvicorn 到底用 FastAPI 做什么。谁能解释一下吗?
有没有办法干净地杀死 uvicorn?
即,如果它在终端的前台运行,我可以在它上面键入 ^C。这会导致 uvivorn 进程终止,并且所有工作进程都将被清理。(即,他们走开了。)
另一方面,如果 uvicorn 在没有终端的情况下在后台运行,那么我无法想出一种干净地杀死它的方法。它似乎忽略了 SIGTERM、SIGINT 和 SIGHUP。我可以用SIGKILL(即-9)杀死它,但是工作进程仍然存在,我必须跟踪所有工作进程并杀死它们。这并不理想。
我在 Red Hat Enterprise Linux Server 7.3 (Maipo) 上使用带有 CPython 3.7.4、uvivorn 版本 0.11.2 和 FastAPI 0.46.0 的 uvicorn。
uvicorn ×10
fastapi ×9
python ×7
python-3.x ×4
asgi ×1
django ×1
frameworks ×1
gunicorn ×1
heroku ×1
ssl ×1