pregel 重要流程总结
本节我们总结回顾一下 Pregel 重要流程,包括
- PregelLoop 的更新循环
- PregelLoop 的崩溃恢复
1. PregelLoop 的更新循环
1.1 任务生成
prepare_next_tasks 会生成两种类型的 task:
- PUSH: 是直接触发 Node 执行,并传入自定义参数
- PULL: 是让 Node 发起检查,自己是否被触发,参数从 Node 监听的 channel 中读入
最终生成的任务包含如下信息:
本节我们总结回顾一下 Pregel 重要流程,包括
prepare_next_tasks 会生成两种类型的 task:
最终生成的任务包含如下信息:
pregel 的实现在 RunnableConfig configurable 配置段中预定义了很多配置项。这些配置项对应我们理解 pregel 有很重要的作用。
以下是 LangGraph 中预定义的 configurable 配置键(CONFIG_KEY_*)的详细说明表格,按如下维度整理:
上一节我们介绍了 pregel loop 的初始化、tick 函数。tick 函数其实也没有介绍完,并标记了我们要理解的其他方法,包括:
_emit_put_checkpointput_writes这一节我们来学习这些函数的实现。
pregel 有关任务生成的代码位于 langgraph\pregel\_algo.py。这个应该算是 pregel 最核心的部分了。_algo.py 内有如下几个函数:
2. prepare_next_tasks
- 用于生成下一个 Pregel step 中的任务。
- 内部会调用 prepare_single_task
3. apply_writes
- 把对 channel 的写入应用到 channel 中,并返回 updated_channels
前面我们介绍了 _algo.py 中关联的对象,这一节我们来介绍 _algo.py 的这几个核心函数:
prepare_single_taskprepare_next_taskslocal_readapply_writesprepare_next_tasks 函数的定义如下:
|
|
下面是入参说明列表:
executor 是 langgraph 中对任务池的抽象。分为同步和异步两个实现。
BackgroundExecutor 是一个基于线程池的上下文管理器,用于在后台并行运行多个同步任务(函数),并在退出上下文时安全地清理、等待和处理异常。