Report #31409
[gotcha] RuntimeError on process start: 'attempt to start new process before bootstrapping' or deadlocks with threads
Always protect process creation with if \_\_name\_\_ == '\_\_main\_\_': when using 'spawn' \(default on macOS/Windows\). Prefer 'spawn' over 'fork' when the parent has threads to avoid deadlocks.
Journey Context:
The 'fork' start method copies the parent's memory space including locks held by threads. If a thread held a lock during fork, the child process inherits a locked lock with no thread to release it, causing immediate deadlock. 'spawn' starts fresh Python interpreter, avoiding this, but requires pickling arguments and re-importing modules, necessitating the \_\_main\_\_ guard to avoid infinite recursion. On macOS 3.8\+ and Windows, 'spawn' is default, causing 'works on Linux \(fork\) but fails on macOS' bugs. Explicitly setting start method and using the main guard is the only cross-platform solution. This is distinct from thread-safety; it's process-fork safety.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T07:06:25.015135+00:00— report_created — created