返回首页
最新
我创建了 FastWorker,因为我厌倦了在 FastAPI 应用中为简单的后台任务部署 Celery + Redis。每当我需要将工作从 API 请求中卸载时,都必须管理 4-6 个独立的服务。对于小型项目来说,这感觉有些过于复杂。
FastWorker 是一个无代理的任务队列,只需要 Python 进程。无需 Redis,无需 RabbitMQ——只需 2-3 个 Python 服务,而不是 4-6 个以上。
---
快速示例:
# tasks.py
```python
from fastworker import task
@task
def send_email(to: str, subject: str):
return {"sent": True}
```
# FastAPI 应用
```python
from fastworker import Client
client = Client()
@app.post("/send/")
async def send_notification(email: str):
task_id = await client.delay("send_email", email, "欢迎!")
return {"task_id": task_id}
```
启动工作进程:
```
fastworker control-plane --task-modules tasks
fastworker subworker --task-modules tasks # 可选
```
---
架构:使用 NNG 消息传递进行直接的点对点通信。控制平面通过优先级堆协调任务分配,并跟踪工作负载。工作进程通过发现套接字自动发现。结果以 LRU/TTL 的方式缓存于内存中。
设计用于:中等规模的 Python 应用(每分钟 1K-10K 个任务)进行后台处理——图像调整大小、报告生成、电子邮件、Webhook。非常适合 FastAPI/Flask/Django。
不适用于:极大规模(每分钟 100K+ 个任务)、多语言栈或需要持久任务存储的系统。对于这些情况,请使用 Celery/RabbitMQ/Kafka。
试试吧:
```
pip install fastworker
```
仓库: [https://github.com/neul-labs/fastworker](https://github.com/neul-labs/fastworker)
FastAPI 集成文档: [https://github.com/neul-labs/fastworker/blob/main/docs/fastapi.md](https://github.com/neul-labs/fastworker/blob/main/docs/fastapi.md)
希望能收到反馈,看看这个工具是否填补了一个有用的空白,或者它的局限性是否使其过于狭窄。
简而言之:互联网对象(IO)是一种精简的、以模式为先的、兼容JSON的格式,减少了结构噪音,提高了现代系统的清晰度,并将令牌数量减少了约40-50%。
游乐场: [https://play.internetobject.org](https://play.internetobject.org)
---
我在2017年开始探索这个想法,当时在构建分布式系统和结构化数据管道时,反复遇到相同的痛点。我希望找到一种干净的、以模式为先的、对人类友好的格式,而不是扩展JSON或在其上添加更多层次,同时在兼容性上保持重要性。
这一概念在多年的时间里逐渐演变,经历了几次重新设计、死胡同和重启,最终汇聚成我现在称之为互联网对象(IO)的形式。关于这一演变的故事可以在这里找到:
[https://internetobject.org/the-story/](https://internetobject.org/the-story/)
尽管IO并不是专门为大型语言模型(LLMs)设计的,但其结构显著提高了令牌效率(与JSON相比,令牌数量减少了约40-50%),这在当今的工作负载中成为了一种实际优势。
我写了一本实用指南,展示了JSON开发者如何过渡到IO,并提供了语法解释:[https://blog.maniartech.com/from-json-to-internet-object-a-lean-schema-first-data-format-part-1-150488e2f274](https://blog.maniartech.com/from-json-to-internet-object-a-lean-schema-first-data-format-part-1-150488e2f274)
有关与JSON的并排比较,请参见以下链接:[https://www.internetobject.org/io-vs-json/](https://www.internetobject.org/io-vs-json/)
如果您想直接尝试该格式,还有一个互动游乐场:[https://play.internetobject.org](https://play.internetobject.org)
[https://play.internetobject.org/simple-collection](https://play.internetobject.org/simple-collection)
这是一次软启动,目的是收集早期反馈——我非常欢迎社区的任何想法。
或者拨打 +62 817-0104-057 联系我们。您也可以将订单详情和问题发送至 appsupport@agoda.com,以获得进一步的帮助。
您可以通过WhatsApp联系客户服务,拨打0817-0104-057或+62 817 0104 057来重新安排Agoda的预订。某些更改也可以通过您预订确认邮件中的“自助服务”链接自行进行,例如更改日期或取消订单,具体取决于酒店的政策。