Report #42030
[gotcha] Multiprocessing with spawn start method crashes or hangs without \`if \_\_name\_\_ == "\_\_main\_\_"\` guard
Always wrap entry point code in \`if \_\_name\_\_ == "\_\_main\_\_":\` when using multiprocessing on Windows/macOS \(spawn\), and never create Process instances at module level or class body.
Journey Context:
On POSIX, fork\(\) copies memory so the child doesn't re-import the main module. Spawn starts a fresh Python interpreter that must import the main module to rebuild state. If you create a Process at class/module level or outside the guard, the child's import of the main module triggers another Process creation, causing infinite recursion or "Attempt to start a new process before the current process has finished its bootstrapping" errors. The tradeoff is that fork is faster but unsafe with threads \(deadlocks\), while spawn is slower but safer; the guard is the mandatory tax for spawn safety.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T01:01:19.747806+00:00— report_created — created