我有两个 Docker 容器:
fastapi;uvicornGET请求http://0.0.0.0服务器似乎工作得很好,因为攻击curl -X GET http://0.0.0.0按预期工作。但是,我的 docker 客户端似乎无法访问。
构建客户端容器(下面的文件)后,运行时docker run -it --name app_client_container app_client:latest我收到以下错误:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to build a new connection: Errno 111 Connection denied'))
我的项目看起来像这样
|- client.Dockerfile
|- client.py
|- client_req.txt
|- server.Dockerfile
|- server.py
|- server_req.txt
Run Code Online (Sandbox Code Playgroud)
客户
# client.Dockerfile
FROM python:3.8
WORKDIR /srv
WORKDIR /srv
ADD client_req.txt /srv/client_req.txt
RUN pip install -r client_req.txt
ADD …Run Code Online (Sandbox Code Playgroud) 我正在设置超时检查,因此我进行了端点:
@app.get("/tc", status_code=200)
def timeout_check():
time.sleep(500)
return "NOT OK"
Run Code Online (Sandbox Code Playgroud)
我正在使用 docker 映像tiangolo/uvicorn-gunicorn-fastapi:python3.7
和命令来运行服务器:
CMD ["gunicorn","--log-level","debug","--keep-alive","15", "--reload", "-b", "0.0.0.0:8080", "--timeout", "15", "--worker-class=uvicorn.workers.UvicornH11Worker", "--workers=10", "myapp.main:app"]
Run Code Online (Sandbox Code Playgroud)
我预计端点会在 15 秒后失败,但事实并非如此。似乎没有遵守超时。有什么解决办法吗?
我有一个带有异步 sqlalchemy 的异步 FastApi 应用程序,源代码(不会提供 schemas.py,因为没有必要):
from sqlalchemy import (
Column,
String,
)
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.decl_api import DeclarativeMeta
from app.config import settings
engine = create_async_engine(settings.DATABASE_URL)
Base: DeclarativeMeta = declarative_base()
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
class Titles(Base):
__tablename__ = "titles"
id = Column(String(100), primary_key=True)
title = Column(String(100), unique=True)
async def get_session() -> AsyncSession:
async with async_session() as session:
yield session
Run Code Online (Sandbox Code Playgroud)
import .database
from fastapi_utils.cbv import cbv
from …Run Code Online (Sandbox Code Playgroud) error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/
Run Code Online (Sandbox Code Playgroud)
我继续下载了Microsoft C++ 构建工具
我应该安装什么?因为有一堆东西
尝试使用 uvicorn 测试我的第一个 FastAPI 应用程序。
在Jupyter Notebook上编写以下代码并保存'main.py'在目录中:/home/user
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
Run Code Online (Sandbox Code Playgroud)
从我正在运行的同一目录:
$uvicorn main --reload
Run Code Online (Sandbox Code Playgroud)
它抛出以下错误:
错误:加载 ASGI 应用程序时出错。导入字符串“main”必须采用“:”格式。
如果所有 fastapi 端点都定义为async def,那么只会有 1 个线程在运行,对吗?(假设有一个独角兽工人)。
只是想确认在这样的设置中,我们永远不会遇到 python 的全局解释器锁。如果在一个具有多个线程的 Flask 框架中为单个 Gunicorn Worker 做同样的事情,那么我们将面临 GIL,它阻碍了线程之间真正的并行性。
所以基本上,在上面的 fastapi 中,并行度限制为 1,因为只有一个线程。为了利用所有核心,我们需要增加使用 Gunicorn 或 uvicorn 的工作人员数量。
我的理解正确吗?
如标题所示,我已经使用powershell安装了uvicorn,并添加了环境变量。但每当我运行该命令时,我都会遇到同样的错误。我知道我一定在做一些小而愚蠢的事情,但是遵循 SO 上的每个答案都告诉我同样的事情,而且我根本没有任何线索。
我正在尝试使用 FastAPI / Uvicorn 在 Google Colab 上运行“本地”网络应用程序,就像我见过的一些 Flask 应用程序示例代码一样,但无法使其工作。有没有人能够做到这一点?欣赏它。
!pip install FastAPI -q
!pip install uvicorn -q
Run Code Online (Sandbox Code Playgroud)
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
Run Code Online (Sandbox Code Playgroud)
#attempt 1
if __name__ == "__main__":
uvicorn.run("/content/fastapi_002:app", host="127.0.0.1", port=5000, log_level="info")
Run Code Online (Sandbox Code Playgroud)
#attempt 2
#uvicorn main:app --reload
!uvicorn "/content/fastapi_001.ipynb:app" --reload
Run Code Online (Sandbox Code Playgroud) 我正在尝试(失败)建立一个简单的 FastAPI 项目并使用 uvicorn 运行它。这是我的代码:
from fastapi import FastAPI
app = FastAPI()
app.get('/')
def hello_world():
return{'hello':'world'}
app.get('/abc')
def abc_test():
return{'hello':'abc'}
Run Code Online (Sandbox Code Playgroud)
这是我从终端运行的:
PS C:\Users\admin\Desktop\Self pace study\Python\Dev\day 14> uvicorn server2:app
INFO: Started server process [3808]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: 127.0.0.1:60391 - "GET / HTTP/1.1" 404 Not Found
INFO: 127.0.0.1:60391 - "GET /favicon.ico HTTP/1.1" 404 Not Found
Run Code Online (Sandbox Code Playgroud)
如您所见,我得到了 404 未找到。可能是什么原因?一些与网络相关的东西,可能是防火墙/VPN 阻止此连接或其他什么?我对此很陌生。提前致谢!
鉴于main.py:
import asyncio
async def new_app():
# Await some things.
async def app(scope, receive, send):
...
return app
app = asyncio.run(new_app())
Run Code Online (Sandbox Code Playgroud)
其次是:
uvicorn main.app
Run Code Online (Sandbox Code Playgroud)
给出:
RuntimeError: asyncio.run() cannot be called from a running event loop
Run Code Online (Sandbox Code Playgroud)
这是因为uvicorn在导入我的应用程序之前已经启动了一个事件循环。如何在 下异步构建应用程序uvicorn?