- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很惊讶这并没有真正被详细询问,但由于某种原因,我无法在任何地方找到这个问题或解决方案。似乎很多人都遇到了一个问题,即您有一个 fastAPI 应用程序,该应用程序还需要与其他一些微服务进行通信(以比 http 消息更有效的方式)。我已经阅读了所有关于集成到 asyncio 中的 zmq 文档,但是到目前为止,我还没有找到任何关于如何使用 fastapi(甚至是 starlette)将 zmq 添加到事件循环中的信息。这是 zmq 网站上的代码示例:
import asyncio
import zmq
from zmq.asyncio import Context
ctx = Context.instance()
async def recv():
s = ctx.socket(zmq.SUB)
s.connect('tcp://127.0.0.1:5555')
s.subscribe(b'')
while True:
msg = await s.recv_multipart()
print('received', msg)
s.close()
这向我们展示了一个异步函数,这很棒,但是这又一次需要在事件循环中与 fastAPI 协程一起运行。这应该怎么做?除了后台任务之外,fastAPI 文档并没有真正为我们提供任何接口(interface)来运行单独的协程。我不确定后台任务中是否发生了任何其他魔法,但对于需要与另一个微服务通信的东西,我希望它具有类似于 fastAPI 协程的调度。此外,您无法在启动时启动后台任务,因此您必须进行一些欺骗性的调用才能使其运行(这很hacky ..但从技术上讲是可行的)。此外,如果我们可以只注册一个处理程序,那就更好了
@app.set("zmq_recv)
async def recv():
s = ctx.socket(zmq.SUB)
s.connect('tcp://127.0.0.1:5555')
s.subscribe(b'')....
这将基于某处的配置,允许 zmq 上下文中的所有消息自动转到此函数。这可能允许我们在 fastAPI 协程中运行 zmq,只需绑定(bind)另一个端口,并确保来自该端口的所有流量都流向这个特殊的 app.set 方法。像这样的东西我会很好......
ctx = Context.instance()
@app.on_event("startup")
async def startup_event():
s = ctx.socket(zmq.PULL)
s.bind('tcp://127.0.0.1:5555').setHandler("zmq_recv") # this setHandler is something magic that tells fastAPI to have all traffic on port 5555 to go to this handler function
@app.on_special_handler("zmq_recv")
async def zmq_recv(socket):
msg = await socket.recv_multipart()
print('received', msg)
理想情况下,这是我想要的,使用 fastAPI 协程......但是让 zmq 套接字调用对特定函数的响应。是否可以创建协程示例或这种模板化示例?如果不是,人们如何声称您可以有效地将 zmq 与 fastapi 一起使用? (我想后台任务可以解决问题..但它似乎真的很虚伪)
最佳答案
我实际上正在寻找类似的东西,专门用于通过非 http 处理程序监听来自消息队列的事件。
我当前的解决方案是连接到事件循环并在那里添加监听器。
它可能看起来像这样:(取自 fastapi 中的这个问题 -> issue )
loop = asyncio.get_event_loop()
loop.create_task(serve(app, config)) # run fastapi
loop.create_task(your_tcp_app()) # run your app
loop.run_forever() # start event loop
您也可以在初始化后调用应用程序正在使用的事件循环,这与您最初所做的更相似:
@app.on_event("startup")
async def startup_event():
loop = asyncio.get_event_loop() # should return the loop fastapi is already using
loop.create_task(your_tcp_app()) # run your app
我正在考虑这个解决方案,因为我害怕 python 中的线程管理,因为这将存在于生产服务中,我可能最终将两个进程完全分开以使事情变得更简单......
关于python-asyncio - FastAPI如何将ZMQ添加到事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61912763/
我正在研究最适合我的 Web 框架。 我们将开发几个微服务,我们需要在一些微服务上分派(dispatch)事件,这些事件可以在其他微服务上监听。 是否支持使用 FastAPI?如果没有,有没有办法监听
快速API 0.68.0 python 3.8 from fastapi import Depends, FastAPI, Header, HTTPException async def verify
在 FastAPI 框架内: 虽然请求数据当然可以作为参数传递,但我想知道函数是否可以在不传递参数的情况下访问有关当前请求的信息。 免责声明:我不认为全局访问请求数据是一个好的做法,但我有一个用例,如
无论如何,FastAPI“依赖项”是否可以解释路径参数。 我有很多形式的功能: @app.post("/item/{item_id}/process", response_class=ProcessR
我有一个由诗歌构建的 fastapi 项目。我想使用 pyproject.tom 中的脚本部分运行应用程序,如下所示: poetry run start 该部分的双引号内是什么? [tool.poet
我正在尝试将分页添加到我的 fastapi 项目中。所以我决定使用这个: fastapi-contrib 我在那里遵循相同的示例,但由于某种原因我收到此错误: type object 'MOrdene
在我的项目文件夹中,我有一个基本的 index.html文件加上静态文件(js、css)以及我的 main.py : from fastapi.staticfiles import StaticFil
FastAPI显示可以设置response_model_exclude_none=True在装饰器中忽略值为 None 的字段:https://fastapi.tiangolo.com/tutoria
FastAPI 生成自动 swagger/openapi 文档。 在 https://fastapi.tiangolo.com/tutorial/response-status-code 的教程中有一
我获得了使用FastApi运行推理服务器的以下代码。在大约8小时内,我的RAM内存增加了4Gi。。更有趣的是,当我停止我的容器时,内存并没有清理干净。。例如,在运行Docker Container之前
今天的文章分享如下在 FastAPI 框架下,使用 pytest 来自动化测试数据库相关的接口,文章的最后给出全部代码。 最近越来越喜欢使用 FastAPI 来写后端服务了,因为它是 Pyth
Docker 学习 https://www.cnblogs.com/poloyy/p/15257059.html 项目结构 .├── app│ ├── __init__.py│ └
下面代码来自官方FastAPI tutorials page ,我无法理解这些语句(例如,name: str)。 from typing import Optional from fastapi im
我是网络通信的新手。我使用 ubuntu 并尝试学习 fastapi。但是,我认为很难理解如何格式化我打算发送回客户端的响应。 要发回的响应的规则是什么?如果您想发回自定义答案 - 例如两个图像文件
我正在尝试从文件中添加路由,但我事先并不知道实际的参数,因此我需要一个通用函数来通过 **kwargs 处理参数。 要添加路由,我正在使用 add_api_route,如下所示: from fasta
我按照此文档设置了一个用户: https://fastapi.tiangolo.com/advanced/security/http-basic-auth/ 但我只收到一个端点“/users/me”的
当我尝试从我的 postgre 数据库中获取一些数据并使用 fastapi 时出现此错误。 我不知道为什么会这样......但这是我的代码,谢谢你的帮助。 路线 @router.get("/fuent
我有一个与在 pycharm 中使用 uvicorn 的 FastAPI 有关的问题。我的项目具有以下结构: LearningPy | |-- apis -----|--modelser
我已经创建了一个登录路径,我在其中发布了我的表单数据并设置了一个 cookie。设置 cookie 后,我重定向到“/main”,在那里我得到 {detail:"Method Not Allowed"
当我使用 FastAPI 时,如何为网络服务指定基本路径? 换句话说 - FastAPI 对象是否有参数可以将端点和我定义的任何其他对象设置为不同的根路径? 例如,如果我的代码带有下面的虚假参数 ro
我是一名优秀的程序员,十分优秀!