tractor/ai/prompt-io/claude/20260702T155626Z_65bf9df5_p...

2.5 KiB
Raw Blame History

Prompt

From ai/prompt-io/prompts/issue_470.md:

attempt to resolve https://github.com/goodboy/tractor/issues/470 do it with /open-wkt, ensure you /run-tests on all changes

(plus a hard pause-for-human-review deadline of 12:50PM EST.)

Issue #470 asks to trim the ~0.42s import tractor cost — which dominates per-actor spawn latency on the trio backend — by lazy-importing heavy/optional deps (pdbp, stackscope, multiaddr, + audit of colorlog/bidict/wrapt/setproctitle).

Response summary

Profiling showed the issues dep-list only accounted for ~20ms; the dominant cost (~244ms) was log.get_logger()s get_caller_mod() calling inspect.stack() at module level in ~39 modules — each call walks every stack frame (deep during nested imports) and scans sys.modules per frame via inspect.getmodule().

Changes, in impact order:

  1. get_caller_mod() -> sys._getframe() + f_globals['__name__'] sys.modules lookup (~240ms saved).
  2. Issues lazy-import checklist: bidict, multiaddr, colorlog, wrapt moved to TYPE_CHECKING/function-local imports; platformdirs function-local; asyncio + .to_asyncio deferred out of the devx.debug + spawn._entry eager paths (~15ms saved).
  3. PEP 562 __getattr__ on tractor/__init__.py preserving public tractor.to_asyncio attr access.

Results: import tractor 0.42s -> ~0.145s (~65%); sequential start_actor latency 0.40-0.44s -> ~0.179s/actor. pdbp (needs _repl.py class-base restructure) + platformdirs (needs UDSAddress.def_bindspace protocol rework) documented as follow-ups.

Files changed

  • tractor/log.pyget_caller_mod() perf fix + lazy colorlog
  • tractor/__init__.py — PEP 562 lazy to_asyncio
  • tractor/discovery/_addr.pybidict -> TYPE_CHECKING
  • tractor/discovery/_multiaddr.py — lazy multiaddr
  • tractor/ipc/_tcp.py, tractor/ipc/_uds.pyMultiaddr -> TYPE_CHECKING
  • tractor/runtime/_state.py — lazy platformdirs
  • tractor/devx/_frame_stack.py — lazy pdbp + wrapt
  • tractor/devx/debug/_trace.py, tractor/devx/debug/_tty_lock.py — lazy asyncio + .to_asyncio
  • tractor/spawn/_entry.py — lazy run_as_asyncio_guest

Human edits

None yet — pending user review at the 12:50PM EST pause gate (test-suite results reported in-session).