SuperAPI AI 工具集

authoring-language-sdk-tasks

编程与开发

查看项目

更新于 10-15 17:20

技能介绍

用途:Airflow 语言 SDK 允许用 Python 之外的语言实现任务逻辑,而 DAG 与调度仍由 Python 负责。本技能描述各语言 SDK 共有的部分,语言特定的原生 API、构建工具与运行时由各自的配套技能说明。

模型:DAG 照常用 Python 编写;需要在其他语言中运行的任务声明为 stub 并路由到专用队列。运行时 Airflow 把 stub 任务交给协调器,协调器为该任务实例启动短暂的本地子进程,运行编译后的原生代码,然后关闭。因此每个任务实例一个子进程,实例间没有共享的进程内状态,数据需通过 XCom 或外部存储传递;调度、重试、队列路由都在 Python 侧,原生侧只实现任务逻辑;跨边界数据为 JSON。

两侧对应:每个任务有两半且必须一致——普通 DAG 文件中的 Python stub(无逻辑,声明任务、队列、依赖图与重试策略)与原生实现(如 Java、Go),其 ID 需与 Python 侧一致。stub 函数名即任务 ID,@dag 名或 dag_id= 即 DAG ID,原生侧必须使用完全相同的 ID。stub 的上游参数仅用于在 Python 中声明依赖,值本身由原生侧通过 XCom 获取。队列、重试等参数设置在 stub 上,不写在原生代码中;原生任务失败会回报 Airflow,再按 stub 的重试策略处理。

XCom 即 JSON 契约:XCom 值以 JSON 存于元数据库,因此 Python 与原生语言的边界是 JSON。Python 类型对应关系:int→整数 number,float→小数 number,str→string,bool→boolean,None→null,list→array,dict→object。各语言 SDK 再把 JSON 类型映射到自己的原生类型。可移植性要点:一个任务写入的值由另一任务按 JSON 读取,消费方须预期与存储时兼容的类型。

限制与陷阱:ID 必须完全匹配,否则出现“no DAGs”或缺失 XCom 错误;两侧都需上游引用;queue 与 retries 设在 stub;stub 函数体必须为空,由 AST 检查强制,仅允许 pass、... 或文档字符串;stub 上拒绝 retry_policy(@task.stub 抛 ValueError),应改用 retries/retry_delay;Assets、deferral 及部分 Airflow 特性在语言 SDK 中支持有限或暂不支持。语言 SDK 处于预览阶段,API 与制品坐标可能变化。