跳转至

taskmq

ci pypi release license python

零外部服务就能跑起来、投递语义可预测、配置显式、调试不用猜的 Python 分布式任务队列。

30 秒上手

from taskmq import App, Config
from taskmq.testing import run_until_idle

app = App(Config(transport="memory://"))

@app.task(queue="email")
def send_email(to: str) -> str:
    return f"sent:{to}"

send_email.delay("a@b.com")             # 投递(异步)
run_until_idle(app, queues=["email"])   # 同进程就地跑 worker:断点调试友好

生产上把 transport 换成真正的后端,worker 单独进程跑:

export TASKMQ_APP=myapp.tasks:app       # 你的 App 实例(module:attr)
taskmq worker -Q email -c 8      # 消费 email 队列,并发 8

特性一览

投递语义 默认 at-least-once(成功才 ack)+ 可见性租约 + DLQ / 重放
优先级 -9..9,数值越大越优先;跨档严格优先 + 档内平级加权轮询 + 未开始预留让位
transport memory://、sqlite://、redis://(含 ?cluster=1)、postgresql://、amqp://;插件可接自有 MQ
执行池 threads(默认)、processes(硬超时可强杀)、asyncio、solo
可靠性 幂等键、concurrency_key 跨 worker 串行、限流、max_deliveries 毒丸保护
编排 原生 DAG 工作流(依赖写在代码里,事件驱动、不轮询)+ beat 定时(cron/interval + 租约选主)
可观测 结构化事件(JSON stdout)、OTel span、taskmq status 看队列 / worker / DLQ
依赖 运行时只有 msgspec;PostgreSQL / AMQP / OTel 都是可选 extras

从这里开始

设计取向与决策记录在设计文档:优先级、任务模型、 工作流、插件与一致性套件、 Redis 公平调度与 Cluster。

安装

只需要 Python 3.9+ 和 pip(不需要 uv):

pip install taskmq-py                        # 分发名是 taskmq-py,import 仍是 taskmq
pip install "taskmq-py[postgres,amqp,otel]"  # 需要哪个后端就带哪个 extra

也可以从 git / Releases / 源码 装。装完就有 taskmq 命令; 没进 PATH 时用 python -m taskmq(等价)。

License

MIT © 2026 liuhuo