Dify workflow 执行时间1200s: Stopped by user

分析结论

执行 1200 秒的 workflow 被 "Stopped by user" 终止,最可能的原因不是用户手动停止,而是应用级别的超时机制自动终止了工作流,但消息文案有误导性。


根本原因:APP_MAX_EXECUTION_TIME 默认 1200 秒超时

文件 : init.py 第 83-86 行

python 复制代码
APP_MAX_EXECUTION_TIME: PositiveInt = Field(
    description="Maximum allowed execution time for the application in seconds",
    default=1200,
)

关键代码: base_app_queue_manager.py 第 55-84 行

python 复制代码
def listen(self):
    listen_timeout = dify_config.APP_MAX_EXECUTION_TIME  # 默认 1200s
    start_time = time.time()
    while True:
        ...
        finally:
            elapsed_time = time.time() - start_time
            if elapsed_time >= listen_timeout or self._is_stopped():
                # ⚠️ 发布 QueueStopEvent,但 stopped_by 硬编码为 USER_MANUAL
                self.publish(
                    QueueStopEvent(stopped_by=QueueStopEvent.StopBy.USER_MANUAL),
                    PublishFrom.TASK_PIPELINE
                )

陷阱:超时也被标记为 "Stopped by user"

listen() 方法中,无论是超时 还是用户手动停止 ,都走到同一个分支,发布 stopped_by=USER_MANUAL 的 QueueStopEvent,对应消息为 "Stopped by user."。

这意味着:

  • 你的 workflow 执行了 1200 秒
  • APP_MAX_EXECUTION_TIME 默认值也是 1200 秒
  • 触发了超时自动终止
  • 但由于代码设计,消息显示为 "Stopped by user"

还有另一个独立超时:WORKFLOW_MAX_EXECUTION_TIME

文件 : init.py 第 784-787 行

python 复制代码
WORKFLOW_MAX_EXECUTION_TIME: PositiveInt = Field(
    description="Maximum execution time in seconds for a single workflow",
    default=1200,
)

这个配置作用于 workflow_entry.py 第 228-229 行的 GraphEngine 的 ExecutionLimitsLayer,如果触发了会走不同的失败路径(GraphRunAbortedEvent → QueueWorkflowFailedEvent),不会显示 "Stopped by user"。


总结

问题 详情
显示消息 "Stopped by user"
实际原因 APP_MAX_EXECUTION_TIME 默认 1200 秒超时 (也有可能是 WORKFLOW_MAX_EXECUTION_TIME 同时触发)
代码缺陷 超时和手动停止共用同一个 USER_MANUAL 枚举值,无法从消息区分
验证方法 检查 WorkflowRun 表中 finished_at - created_at 是否 ≈ 1200 秒

解决方案

如果你的 workflow 确实需要超过 1200 秒的执行时间,可以通过环境变量增大超时配置:

bash 复制代码
# 在 .env 中设置
APP_MAX_EXECUTION_TIME=3600    # 队列监听器超时,改为 1 小时
WORKFLOW_MAX_EXECUTION_TIME=3600  # GraphEngine 执行限制,也改为 1 小时

已完成: 分析超时与停止机制 (3/3)

Read memory

Created memory file

分析完成!核心结论是:

你的 workflow 执行了 1200 秒,正好触发了 APP_MAX_EXECUTION_TIME(默认 1200 秒)超时,代码自动终止了工作流,但消息却显示为 "Stopped by user"------这是代码中一个命名缺陷,超时和手动停止共用同一个枚举值。

相关推荐
小炫y9 小时前
基于规则的NLP技术-词的处理
人工智能·自然语言处理
冬奇Lab9 小时前
LLM 驱动的自动化测试系列(09):移动端自动化(五)——当通用 Agent 框架下沉到测试场景
人工智能·agent·测试
冬奇Lab10 小时前
开源项目第233期:Open-XiaoAI — 刷机接管小米小爱音箱,接入 ChatGPT/小智 AI/Gemini Live
人工智能·开源·资讯
Sayai10 小时前
MCP Server 开发实战:Spring AI 把后端日志查询暴露给 AI Agent(7 条设计原则与踩坑实录)
java·人工智能·ai agent·spring ai·mcp
阿_旭10 小时前
【AI前沿】GTR:一套网络通吃检测/分割/姿态/深度六大任务,对标YOLO26
人工智能
AI你一生一世10 小时前
当一句自然语言指令穿透三层抽象:从“把按钮改成蓝色“看 AI 编码代理的真实边界
人工智能·自然语言处理·前端架构·技术债·设计令牌·ai编码代理·代码抽象
袋鼠云数栈10 小时前
非结构化数据也能“周期调度“:离线开发BatchWorks的多模态数据同步实践
大数据·人工智能·多模态数据·离线开放
算了吧956910 小时前
GEO服务商选型指南:2026年企业评估框架与决策路径
大数据·人工智能·物联网
workflower10 小时前
矿用机器人人工智能安全与治理体系
人工智能·安全·机器学习·机器人·云计算·无人机
tianbin91110 小时前
从模型微调到API调用:大模型训练后的高效工程化落地路径
人工智能