[BUG] CrewAI 1.4.1 hangs after successful kickoff_for_each() crew execution and never terminates

用户在 Linux 环境中使用 CrewAI 1.4.1,通过 crew.kickoff_for_each() 运行 Crew。尽管日志显示 "Crew run completed",但进程一直挂起,必须手动 Ctrl+C 终止。使用 crew.kickoff() 代替则不会出现挂起现象。

[BUG] CrewAI 1.4.1 hangs after successful kickoff_for_each() crew execution and never terminates

[BUG] CrewAI 1.4.1 hangs after successful kickoff_for_each() crew execution and never terminates

快速结论:该问题出现在使用 CrewAI 1.4.1 的 kickoff_for_each() 方法时,即便 Crew 执行成功,进程也会挂起不退出。优先排查是否由异步异常传播失败导致,建议升级到 CrewAI 1.6.1 或更高版本。

问题场景

用户在 Linux 环境中使用 CrewAI 1.4.1,通过 crew.kickoff_for_each() 运行 Crew。尽管日志显示 “Crew run completed”,但进程一直挂起,必须手动 Ctrl+C 终止。使用 crew.kickoff() 代替则不会出现挂起现象。

报错原文

[2025-11-09 05:41:41][INFO]: Crew run completed
Exception ignored in: <module 'threading' from '/usr/lib/python3.10/threading.py'>
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1567, in _shutdown
    lock.acquire()
KeyboardInterrupt:

原因分析

经过社区分析,这是一个典型的异步异常传播失败问题。具体原因包括:

  • 异常被异步循环吞没:当某个子 Crew 执行失败时,异常未能正确传播,导致 asyncio.gather 永远等待一个不会完成的任务
  • 编排层缺少超时机制:虽然单个任务可能设置了超时,但 kickoff_for_each() 编排层本身没有超时保护,导致无限挂起
  • 资源未释放:失败的任务未释放连接、内存等资源,可能导致进程冻结

另一个潜在原因是追踪(tracing)机制在禁用后仍可能被触发,导致进程在后台等待 HTTP 响应或 SSL 连接超时。但即使设置了 CREWAI_TRACING_ENABLED=false,追踪信息仍然可能被收集。

环境排查

  • CrewAI 版本(从 1.4.1 升级到 1.6.1 可解决)
  • Python 版本(用户使用了 Python 3.10)
  • 环境变量配置:确认 CREWAI_DISABLE_TELEMETRYCREWAI_DISABLE_TRACINGCREWAI_TRACING_ENABLED 等追踪相关变量是否已正确设置
  • 是否已执行 crewai login(未登录时可能因 HTTP 401 导致挂起)

解决步骤

  1. 升级 CrewAI 版本:用户反馈升级到 CrewAI 1.6.1 后问题得到解决。
  2. 检查追踪设置:确保环境变量正确配置:CREWAI_DISABLE_TRACING=trueCREWAI_TRACING_ENABLED=false。注意这些环境变量在 1.4.1 中可能不会完全生效。
  3. 使用 kickoff() 替代:如果无法升级,可优先尝试改用 crew.kickoff() 代替 kickoff_for_each() 作为临时方案。
  4. 添加编排层超时:如果必须使用 kickoff_for_each(),可在外部包装异步超时逻辑。以下是可能修复模式(社区提供的解决方案):
async def resilient_kickoff_for_each(crews, timeout=300):
    tasks = [asyncio.wait_for(crew.kickoff_async(), timeout) for crew in crews]
    results = await asyncio.gather(*tasks, return_exceptions=True)
    # Handle exceptions explicitly, don't swallow

验证方法

运行相同的 Crew 任务,使用 kickoff_for_each() 方法,确认进程在输出 “Crew run completed” 后能够正常退出,无需手动终止。检查是否还会出现追踪相关的 HTTP 请求日志(如 “Uploading trace batch”)。

参考来源

crewAIInc/crewAI #3871

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 11224

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注