84 lines
2.5 KiB
Markdown
84 lines
2.5 KiB
Markdown
|
|
---
|
||
|
|
model: claude-fable-5
|
||
|
|
service: claude
|
||
|
|
session: b6b42e23-0454-4d9b-be1c-0a89d65aed1b
|
||
|
|
timestamp: 2026-07-02T15:56:26Z
|
||
|
|
git_ref: 65bf9df5
|
||
|
|
scope: code
|
||
|
|
substantive: true
|
||
|
|
raw_file: 20260702T155626Z_65bf9df5_prompt_io.raw.md
|
||
|
|
---
|
||
|
|
|
||
|
|
## 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 issue's 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. Issue's 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.py` — `get_caller_mod()` perf fix +
|
||
|
|
lazy `colorlog`
|
||
|
|
- `tractor/__init__.py` — PEP 562 lazy `to_asyncio`
|
||
|
|
- `tractor/discovery/_addr.py` — `bidict` ->
|
||
|
|
`TYPE_CHECKING`
|
||
|
|
- `tractor/discovery/_multiaddr.py` — lazy `multiaddr`
|
||
|
|
- `tractor/ipc/_tcp.py`, `tractor/ipc/_uds.py` —
|
||
|
|
`Multiaddr` -> `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).
|