Report #64019
[gotcha] Circular imports cause deadlocks when a module spawns a thread that imports the same module during initialization
Never spawn threads or perform imports inside module-level initialization \(at import time\); defer thread creation to explicit init functions or use if \_\_name\_\_ == '\_\_main\_\_' guards; ensure circular imports use 'import X' rather than 'from X import Y' to allow the module to be added to sys.modules before execution finishes.
Journey Context:
When module A imports module B, Python acquires a lock on B's import. If B starts a thread during its initialization that tries to import A \(or B\), the thread blocks waiting for B's import lock, while B waits for the thread to complete \(if joined\), causing a deadlock. This occurs because the import lock is held by the importing thread and is not released until the import completes, but the spawned thread needs the same lock to perform its own import. The pattern of deferring thread creation until after imports complete avoids holding import locks during thread operations, breaking the circular wait condition.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T13:56:35.191463+00:00— report_created — created