标签: hypercorn

如何在像 hypercorn 或 uvicorn 这样的 ASGI 服务器上运行 Windows IIS?

我有使用Python编写的基于API的Web应用程序FastApi它采用UvicornHypercorn基于deployment.These都是ASGI服务器。有没有办法在此之上运行 IIS?

python iis asgi uvicorn hypercorn

9
推荐指数
1
解决办法
1330
查看次数

Python3.7 asyncio 启动 webserver (FastAPI) 和 aio_pika 消费者

在我的项目中,我尝试启动一个 REST API(使用 FastAPI 构建并使用 Hypercorn 运行),另外我还想在启动时启动一个 RabbitMQ Consumer(使用 aio_pika):

Aio Pika 提供了一个强大的连接,可以在失败时自动重新连接。如果我使用hypercorn app:app消费者运行下面的代码并且其余接口正确启动,但是从 aio_pika 重新连接不再起作用。如何在两个不同的进程(或线程?)中归档生产稳定的 RabbitMQ Consumer 和 RestAPI。我的 python 版本是 3.7,请注意我实际上是一个 Java 和 Go 开发人员,以防我的方法不是 Python 方式:-)

@app.on_event("startup")
def startup():
   loop = asyncio.new_event_loop()
    asyncio.ensure_future(main(loop))


@app.get("/")
def read_root():
   return {"Hello": "World"}


async def main(loop):
connection = await aio_pika.connect_robust(
    "amqp://guest:guest@127.0.0.1/", loop=loop
)

async with connection:
    queue_name = "test_queue"

    # Creating channel
    channel = await connection.channel()  # type: aio_pika.Channel

    # Declaring queue
    queue = await channel.declare_queue(
        queue_name,
        auto_delete=True
    ) …
Run Code Online (Sandbox Code Playgroud)

python-3.x python-asyncio fastapi hypercorn

7
推荐指数
1
解决办法
2242
查看次数

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
查看次数

Quart 应用程序如何从使用多个工作线程中受益?

我正在 Python 3.8 中尝试 Quart 和 Hypercorn。据我了解,Quart 通常用于单线程应用程序。但我看到 Hypercorn 有一个--workers运行该应用程序的选项。

workers      w, --workers      The number of workers to spawn and use.
Run Code Online (Sandbox Code Playgroud)

单线程应用程序如何从使用多个工作线程中受益?

python python-asyncio quart hypercorn

4
推荐指数
1
解决办法
986
查看次数

适用于 Continumio/miniconda3 环境的更干净的 Dockerfile?

我有一个Python3.9 / Quart / Hypercorn 微服务,它在配置有environment.yml 文件的conda 环境中运行。基础镜像是 Continumio/miniconda3。

由于 conda init 问题等,花了很多功夫才启动这个项目。

是否有一种更干净的方法可以在 Docker 中安装并激活 conda 环境,而不必求助于 conda run 命令并覆盖默认的 SHELL 命令?

FROM continuumio/miniconda3

COPY . /api/

WORKDIR /api/src

# See this tutorial for details https://pythonspeed.com/articles/activate-conda-dockerfile/
RUN conda env create -f /api/conda_environment_production.yml
SHELL ["conda", "run", "-n", "ms-amazing-environment", "/bin/bash", "-c"]
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "ms-amazing-environment", "hypercorn", "--bind", "0.0.0.0:5000", "QuartAPI:app"]

EXPOSE 5000
Run Code Online (Sandbox Code Playgroud)

python docker conda quart hypercorn

4
推荐指数
1
解决办法
3255
查看次数

为什么用 Hypercorn 运行 Quart 应用程序/它不是自动的吗?

如果您检查Quart库,app.run()只需建立一些配置,然后使用asyncio.run(serve(self, config)),其中 serve 来自from hypercorn.asyncio import serve

因此,即使您通过运行Quart应用程序python myapp.py,它不是已经在使用Hypercorn服务器了吗?

特别是,this 和 running via 有hypercorn myapp:app什么区别?

https://pgjones.gitlab.io/quart/deployment.html

不建议在生产中直接运行 Quart(通过 run())。相反,建议使用 Hypercorn 或替代 ASGI 服务器运行 Quart。Hypercorn 与 Quart 一起安装,默认情况下用于处理请求(例如使用 run())

所以听起来,即使Hypercorn默认使用 来处理请求run(),也不建议使用run()? 还有人糊涂吗?

python-asyncio server python-3.7 quart hypercorn

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