对于需要 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 是 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 是一个任务队列管理器,它允许使用消息队列和调度在 Python 中运行长时间运行的任务。
Celery 已成为社区的广泛继承者,过去六年icode9技术分享一直在使用它。但是,随着时间的推移,icode9技术分享遇到了很多问题。本节将讨论可能的问题和备选方案。
icode9技术分享在生产中遇到的一些问题是:
为了继续使用它icode9技术分享做了什么:
icode9技术分享在使用Celery时推荐什么:
最后,icode9技术分享讨论了构建新后端时icode9技术分享最常遇到的问题的解决方案——使用 Faust,您可以轻松处理流,并将 FastAPI 用于 API 层,将 Celery/Huey 用于长时间运行的任务。
标签:python异步处理库,FastAPI,Faust,Celery 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。