| name | funboost-multi-consumer-startup |
| description | 当需要在 funboost 中连续启动多个函数消费(多个消费者同时运行)时使用。触发场景:一个脚本里同时跑多个 @boost 任务函数的消费、为不同队列启动多个消费者。关键词:连续启动, 多个消费者, consume, multi consume, 同时消费, 启动多个, 多个队列消费。 |
Funboost 连续启动多个消费者
概述
Funboost 的 consume() 天生非阻塞——调用后立即返回,消费在后台运行。因此连续启动多个函数消费非常简单:最基本的用法就是 2 个函数直接顺序调用 consume(),不需要线程、进程或任何包装。
适用场景
- 一个脚本里同时运行多个任务函数的消费者
- 多个队列同时被消费
铁律(绝对不可违反)
- 禁止用
threading.Thread 包装 consume() — 如 threading.Thread(target=func1.consume).start() 是多此一举,func1.consume() 本身不会阻塞主线程
- 禁止用
subprocess 或 multiprocessing.Process 逐个启动消费 — 框架已从层面支持直接连续调用
速查表
| 启动方式 | 代码 | 说明 |
|---|
| 连续启动多个 | func1.consume(); func2.consume() | 最基本的用法,直接顺序调用 |
| 主线程保活 | enable_ctrl_c_quit_on_windows() | 主线程无其他阻塞任务时建议调用,Ctrl+C 可退出 |
核心代码模式
最基本的连续启动:2 个函数顺序调用
from funboost import boost, BoosterParams, BrokerEnum, enable_ctrl_c_quit_on_windows
@boost(BoosterParams(queue_name="queue_a", broker_kind=BrokerEnum.SQLITE_QUEUE, concurrent_num=3, qps=5))
def task_a(x: int):
return x * 1
@boost(BoosterParams(queue_name="queue_b", broker_kind=BrokerEnum.SQLITE_QUEUE, concurrent_num=3, qps=5))
def task_b(x: int):
return x * 10
if __name__ == "__main__":
task_a.push(1); task_b.push(1)
task_a.consume()
task_b.consume()
enable_ctrl_c_quit_on_windows()
每个消费者拥有独立的并发池、控频、重试等配置,互不影响。函数更多时同理,继续顺序调用 func3.consume() 即可。
验证脚本
scripts/demo_multi_consume.py 验证多个消费者连续启动后各自独立消费,可运行:
运行前必须设置 PYTHONPATH=项目根目录。
常见错误
| 错误写法 | 正确写法 |
|---|
threading.Thread(target=func1.consume).start() | func1.consume() 直接调用 |
subprocess.Popen([...func1...]) 启动消费 | func1.consume() |
用 time.sleep 前没启动消费就 push | 先 push 再 consume,或 push 后 consume |
| 脚本没有保活导致主线程退出 | 末尾加 enable_ctrl_c_quit_on_windows() |
相关 Skill
using-funboost-basics — 基础使用入门(启动消费、push/publish)