Skip to content

fix(telemetry): skip signal registration on non-main threads#4394

Open
thecaptain789 wants to merge 1 commit intocrewAIInc:mainfrom
thecaptain789:fix/telemetry-thread-check
Open

fix(telemetry): skip signal registration on non-main threads#4394
thecaptain789 wants to merge 1 commit intocrewAIInc:mainfrom
thecaptain789:fix/telemetry-thread-check

Conversation

@thecaptain789
Copy link

@thecaptain789 thecaptain789 commented Feb 6, 2026

Adds a main thread check before attempting to register signal handlers in the telemetry module.

Signal handlers can only be registered from the main thread, and attempting to do so from other threads raises ValueError with noisy tracebacks that clutter the console output.

This commonly occurs when CrewAI is imported from web frameworks like Streamlit, Flask, Django, or Jupyter notebooks which may initialize imports from background threads.

The fix adds a simple check at the start of _register_shutdown_handlers():

if threading.current_thread() is not threading.main_thread():
    logger.debug(
        "Skipping signal handler registration (not running in main thread)"
    )
    return

The atexit handler is still registered since it works from any thread.

Fixes #4289


Note

Low Risk
Small, localized change in shutdown/signal setup that mainly avoids exceptions in non-main-thread environments; it should not affect telemetry behavior in normal main-thread execution.

Overview
Prevents noisy ValueError tracebacks during telemetry initialization by skipping OS signal handler registration when not running on the main thread.

Telemetry._register_shutdown_handlers() still registers the atexit shutdown hook, but now early-returns (with a debug log) before calling signal.signal(...) when imported/initialized from background threads (common in web/notebook environments).

Written by Cursor Bugbot for commit 1702644. This will update automatically on new commits. Configure here.

Add main thread check before attempting to register signal handlers.
Signal handlers can only be registered from the main thread, and
attempting to do so from other threads raises ValueError with noisy
tracebacks.

This commonly occurs when CrewAI is imported from web frameworks
like Streamlit, Flask, Django, or Jupyter notebooks which may
initialize imports from background threads.

Fixes crewAIInc#4289
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] Noisy ValueError tracebacks when CrewAI initialized from non-main thread

1 participant