大疆无人机:如何革新雪崩救援行动
2026-07-14 3398501
2026-07-14 0
这是一个3 层架构的超时杀进程错误:

复制代码Plugin (Python) ──[SSE]──▶ Plugin Daemon (Go) ──[HTTP]──▶ Dify API (Python)
│
⏱️ 计时器
(600s 默认)
错误消息 "killed by timeout" 来源于 langgenius/dify-plugin-daemon 仓库的 Go 代码,它出现在两处:
| 位置 | 文件 | 场景 |
|---|---|---|
| SSE 流处理 | internal/service/base_sse.go | Agent 执行过程中,Daemon 通过 SSE 与插件通信,超时后写回 "killed by timeout" |
| 端点处理 | internal/service/endpoint.go | 插件端点调用超时,返回 HTTP 500 |
Go 端的关键逻辑:
复制代码// 伪代码示意
timer := time.NewTimer(time.Duration(maxExecutionTimeout) * time.Second)
select {
case <-timer.C:
// 超时 → 杀死插件进程,返回错误
writeData(InternalServerError("killed by timeout"))
case <-done:
// 正常完成
}
在 base.py 中,当 Daemon 返回 HTTP 500 时:
复制代码# 第 266 行
except httpx.HTTPStatusError as e:
if e.response.status_code < 500:
raise PluginDaemonClientSideError(...)
else:
raise PluginDaemonInternalServerError(description=str(e))
然后 _handle_plugin_daemon_error 方法(第 380 行)根据错误类型名反序列化:
复制代码case PluginDaemonInternalServerError.__name__:
raise PluginDaemonInternalServerError(description=message)
最终错误格式为:req_id: 15279e8a2e PluginDaemonInternalServerError: killed by timeout
delete_endpoint() 中捕获 PluginDaemonInternalServerError,用于区分"真的错误"和"已删除"(幂等删除逻辑)PluginDaemonInternalServerError 映射为重试/降级策略有两个独立的 600 秒超时配置,含义不同:
| 配置项 | 位置 | 默认值 | 作用 |
|---|---|---|---|
PLUGIN_MAX_EXECUTION_TIMEOUT | Plugin Daemon 容器环境变量 | 600s | ️ Daemon 杀死插件进程的超时 |
PLUGIN_DAEMON_TIMEOUT | API 容器环境变量 | 600s | Dify API 等待 Daemon HTTP 响应的超时 |
配置文件位置:
| 文件 | 内容 |
|---|---|
api/configs/feature/__init__.py:236 | PLUGIN_DAEMON_TIMEOUT Pydantic 字段定义 |
api/core/plugin/impl/base.py:44-55 | 构建 httpx.Timeout 实例 |
docker/docker-compose-template.yaml:232 | API 端: PLUGIN_DAEMON_TIMEOUT=${PLUGIN_DAEMON_TIMEOUT:-600.0} |
docker/docker-compose-template.yaml:554 | Daemon 端: PLUGIN_MAX_EXECUTION_TIMEOUT=${PLUGIN_MAX_EXECUTION_TIMEOUT:-600} |
docker/envs/core-services/plugin-daemon.env.example:13 | PLUGIN_MAX_EXECUTION_TIMEOUT=600 |
docker/envs/core-services/api.env.example:12 | PLUGIN_DAEMON_TIMEOUT=600.0 |
req_id: 15279e8a2e PluginDaemonInternalServerError: killed by timeout 表示:
PLUGIN_MAX_EXECUTION_TIMEOUT(默认 600 秒 / 10 分钟)"killed by timeout"PluginDaemonInternalServerError可能的原因:
PLUGIN_MAX_EXECUTION_TIMEOUT 设置过小(默认 600s)解决方案方向:
PLUGIN_MAX_EXECUTION_TIMEOUT(如 1200)