部署运行

当前 SDK 没有“发布”或“立即运行”方法。create_workflow()/CreateWorkflow() 创建定义并配置处理节奏;工作流何时产生作业由 ProcessMode 和数据载入决定。

处理节奏

ProcessMode 有两个整数字段:

字段

含义

interval

处理间隔,单位为秒;SDK 将 -1 解释为文件载入触发

offset

处理偏移量,单位为秒

高层文档处理 helper 固定使用 interval = -1offset = 0。低层创建示例可传正数间隔,例如 3600;具体调度行为仍应在目标实例验证,SDK 不提供独立的调度对象读取接口。

从文件载入到作业

文件载入触发的完整链路是:

  1. 创建工作流并保存返回的工作流 ID;

  2. 将文件写入配置的源 Volume,并保存返回的源文件 ID;

  3. 使用这两个 ID 查询作业;

  4. 等待状态变为完成或失败;

  5. 从目标 Volume 读取结果。

Python:

from moi import RawClient, SDKClient
from moi.models import WorkflowJobStatus

raw = RawClient("https://api.example.com", "your-api-key")
client = SDKClient(raw)

job = client.wait_for_workflow_job(
    workflow_id,
    source_file_id,
    poll_interval=2.0,
    timeout=120.0,
    wait_for_statuses=[
        WorkflowJobStatus.COMPLETED,
        WorkflowJobStatus.FAILED,
    ],
)
print(job["job_id"], WorkflowJobStatus.to_string(job["status"]))

Go:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
defer cancel()

job, err := client.WaitForWorkflowJob(
    ctx,
    workflowID,
    sourceFileID,
    2*time.Second,
    []sdk.WorkflowJobStatus{
        sdk.WorkflowJobStatusCompleted,
        sdk.WorkflowJobStatusFailed,
    },
)
if err != nil {
    return err
}
fmt.Println(job.JobID, job.Status.String())

Python helper 的 timeout 默认 60 秒;Go helper 在传入的 context 没有 deadline 时也使用 60 秒默认超时。未传目标状态时,两者都会在作业一出现时返回,而不是等待完成。

避免重复处理

等待超时只表示客户端没有在期限内观察到目标状态,不代表平台没有创建作业。不要因此重复上传同一个文件。先用工作流 ID 和源文件 ID重新查询;写入源 Volume 时也应使用 SDK 提供的去重配置。

作业状态查询见运行控制,结果读取见数据血缘