跳转至

State

State 表示一次 flow runtask run 当前所处的状态。

它不是简单的字符串,而是一个包含状态信息的对象,可以帮助你判断:

  • 当前是否在运行
  • 是否成功结束
  • 是否失败 / 崩溃 / 被取消
  • 是否命中缓存
  • 是否正在等待重试

只有 run 才有 state,flow / task 本身没有 state。


状态类型

Prefect 的 State 有两个维度:

  • Name(名称):更偏展示(UI、日志)
  • Type(类型):驱动底层编排逻辑
Name Type Terminal? 说明
Scheduled SCHEDULED 已调度,将在未来某个时间运行
Late SCHEDULED 已过调度时间,但还没被 worker 执行(可能有问题)
AwaitingRetry SCHEDULED 运行失败,但还有重试次数,等待重试
AwaitingConcurrencySlot SCHEDULED 等待可用并发资源(被并发限制卡住)
Resuming SCHEDULED 准备恢复执行(从暂停状态恢复)
Pending PENDING 已提交执行,但还在等待资源或前置条件
Running RUNNING 正在执行
Retrying RUNNING 正在执行(重试中的运行)
Paused PAUSED 暂停执行,等待人工或条件触发继续
Suspended PAUSED 暂停且进程已退出(比 paused 更彻底)
Cancelling CANCELLING 正在清理资源,准备取消
Cancelled CANCELLED 被用户取消
Completed COMPLETED 成功执行完成
Cached COMPLETED 使用缓存结果(没有真正执行)
RolledBack COMPLETED 执行成功,但事务回滚了
Failed FAILED 代码执行失败(异常且无重试)
TimedOut FAILED 超时导致失败
Crashed CRASHED 基础设施问题(不是代码错误)

状态流转

%%{
  init: {
    'theme': 'neutral',
    'flowchart': {
      'curve' : 'basis',
      'rankSpacing': 80,
      'nodeSpacing': 70,
      'width': 5
    }
  }
}%%

flowchart TD
    %% Style definitions
    classDef scheduled fill:#fcd14edb,stroke:#fcd14edb
    classDef pending fill:#A99FADdb,stroke:#A99FAD
    classDef running fill:#1860f2db,stroke:#1860f2db
    classDef paused fill:#a99faddb,stroke:#a99faddb
    classDef completed fill:#2ac769db,stroke:#2ac769db,stroke-width:2px
    classDef failed fill:#fb4e4ef5,stroke:#fb4e4ef5,stroke-width:2px
    classDef crashed fill:#f97316db,stroke:#f97316db,stroke-width:2px
    classDef cancelled fill:#3d3d3da8,stroke:#3d3d3da8,stroke-width:2px
    classDef awaiting_concurrency_slot fill:#ede7f6,stroke:#4527a0,stroke-width:2px

    %% States
    subgraph scheduled_type[Scheduled]
    Scheduled[Scheduled]:::scheduled
    Late[Late]:::scheduled
    AwaitingConcurrencySlot[AwaitingConcurrencySlot]:::scheduled
    end

    Running[Running]:::running

    Failed[Failed]:::failed

    subgraph scheduled_type2[Scheduled]
    AwaitingRetry[Awaiting Retry]:::scheduled
    end

    subgraph running_type[Running]
    Retrying[Retrying]:::running
    end

    Pending[Pending]:::pending



    Cancelling[Cancelling]:::cancelled
    Cancelled[Cancelled]:::cancelled

    Cached[Cached]:::completed
    RolledBack[Rolled Back]:::completed
    Crashed[Crashed]:::crashed

    Paused[Paused]:::paused

    Completed[Completed]:::completed

    %% Connections
    Scheduled --> |Scheduled start time passes without entering Pending| Late
    Scheduled --> |Worker/Runner successfully submits run| Pending
    Scheduled --> |Worker encounters concurrency limit| AwaitingConcurrencySlot

    AwaitingConcurrencySlot --> Pending

    Late -->  Pending

    Pending --> |Preconditions met| Running    


    Running -.-> |Success| Completed

    %%problematic section:
    Retrying -.-> |Success| Completed
    Failed --> |Retries remaining| AwaitingRetry
    AwaitingRetry --> |Retry attempt| Retrying
    Retrying -.-> |Failure| Failed



    Running -.-> |Error| Failed

    Running -.-> |Infrastructure issue| Crashed
    Running -.-> |Cache hit| Cached
    Running -.-> |Transaction rollback| RolledBack
    Running --> |User cancels| Cancelling

    Running --> |Manual pause| Paused
    Paused --> |Resume| Running

    Cancelling -.-> |Cleanup complete| Cancelled