编程语言
首页 > 编程语言> > 如何在python项目中实现异步构建?FastAPI 、Faust、Celery 异步处理库使用介绍

如何在python项目中实现异步构建?FastAPI 、Faust、Celery 异步处理库使用介绍

作者:互联网

icode9技术分享之前介绍了使用asyncio 来构建快速稳定异步处理后端,今天icode9技术分享要介绍其他几个异步和流处理库用于构建运行快速的简单稳定服务。这几个库分别是FastAPI 、流处理库faust以及任务队列管理器Celery
 

FastAPI — 用于需要 HTTP (REST) 的服务

对于需要 HTTP 和 REST 能力的服务,icode9技术分享使用了一个名为 FastAPI 的软件。FastAPI 是一个构建在 Starlette 之上的包(由构建 django-rest-framework 和 Uvicorn 的同一个人维护的包)。

FastAPI 是一种现代、快速(高性能)的 Web 框架,用于基于标准 Python 类型提示使用 Python 3.6+ 构建 API。它的主要优点是:

代码的一个小例子是:

从 fastapi 导入 FastAPI应用程序 = FastAPI()@app.get(“/”)异步定义 read_root():返回{“你好”:“世界”}@app.get(“/items/{item_id}”)async def read_item(item_id: int, q: str = None):返回{“item_id”:item_id,“q”:q}

Faust——让流处理变得简单

Faust 是 Robinhood 公司的人贡献的一个很棒的包。Faust 基于 Apache Kafka,基本上为您提供了 Python 中的 Kafka Stream 功能。

使用Faust,您可以:

icode9技术分享在许多用例中大量使用了 faust:

所有这些任务可能需要几天时间才能完成,因为您需要设置 kafka 消费者(使用 aiokafka)、http/websocket 服务器并设置指标。对于领导者选举和窗口化等高级功能,您可能会编写大量代码。Faust 为您提供了所有这些精巧的功能,而无需编写一行代码,而且效果很好!icode9技术分享在生产中使用了一年多,没有出现任何严重问题,Robinhood 也是如此。

Faust 当前状态的缺点是它不适合低延迟使用(因为它在给定秒内从 kafka 提取的数据量非常低)。

代码的一个小例子是:

app = faust.App('myapp', broker='kafka://localhost')# 模型描述了消息是如何序列化的:# {“account_id”: “3fae-…”, 金额”: 3}类订单(faust.Record):account_id: 海峡金额:整数@app.agent(value_type=Order)异步定义订单(订单):订单中的订单异步:# 处理无限的订单流。print(f'Order for {order.account_id}: {order.amount}')

Celery

Celery 是一个任务队列管理器,它允许使用消息队列和调度在 Python 中运行长时间运行的任务。

Celery 已成为社区的广泛继承者,过去六年icode9技术分享一直在使用它。但是,随着时间的推移,icode9技术分享遇到了很多问题。本节将讨论可能的问题和备选方案。

icode9技术分享在生产中遇到的一些问题是:

为了继续使用它icode9技术分享做了什么:

icode9技术分享在使用Celery时推荐什么:

最后,icode9技术分享讨论了构建新后端时icode9技术分享最常遇到的问题的解决方案——使用 Faust,您可以轻松处理流,并将 FastAPI 用于 API 层,将 Celery/Huey 用于长时间运行的任务。

标签:python异步处理库,FastAPI,Faust,Celery
来源: