Skip to content

Commit 540ec85

Browse files
rustyconoverclaude
andcommitted
perf(tests): cut subprocess worker startup ~55% via lazy imports
Test workers used to spend ~310ms per spawn on import overhead, dominated by two avoidable costs: 1. Workers imported `tests.test_rpc` to get `RpcFixtureService` / `RpcFixtureServiceImpl`, dragging in pytest, conftest, and httpx — none of which the worker uses at runtime. Extract the fixture service (Protocol, Impl, state classes, _CancelProbe, DescribeResult, StreamHeader, Color) into a new `tests/_fixture_service.py`. The seven `serve_fixture_*.py` workers import from there directly; `tests.test_rpc` re-exports the names so existing test imports keep working. 2. `vgi_rpc/__init__.py` eagerly imported `vgi_rpc.http` (Falcon, httpx), `vgi_rpc.sentry` (sentry_sdk), `vgi_rpc.otel`, `vgi_rpc.s3`, and `vgi_rpc.gcs` even though most callers — and every pipe/subprocess worker — never use them. Convert to module-level `__getattr__` lazy loading keyed by `_LAZY_ATTRS`. `__all__` is built once at import time by probing the *leaf* third-party deps via `importlib.util.find_spec` (probing `vgi_rpc.http._oauth_jwt` would import `vgi_rpc.http` and defeat the lazy point). Results on this machine: - Worker cold start: 312ms → 140ms (-55%) - `import vgi_rpc`: ~250ms → ~115ms (-54%) - Full pytest suite: 132s → 94s (-29%) Public surface unchanged: `from vgi_rpc import http_connect`, `vgi_rpc.SentryConfig`, `from vgi_rpc import *` all behave identically. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent cc3e24e commit 540ec85

10 files changed

Lines changed: 648 additions & 544 deletions

tests/_fixture_service.py

Lines changed: 507 additions & 0 deletions
Large diffs are not rendered by default.

tests/serve_fixture_describe.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
stdin/stdout for introspection via the CLI.
88
"""
99

10-
from tests.test_rpc import RpcFixtureService, RpcFixtureServiceImpl
10+
from tests._fixture_service import RpcFixtureService, RpcFixtureServiceImpl
1111
from vgi_rpc.rpc import RpcServer, serve_stdio
1212

1313

tests/serve_fixture_describe_http.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import waitress
1515

16-
from tests.test_rpc import RpcFixtureService, RpcFixtureServiceImpl
16+
from tests._fixture_service import RpcFixtureService, RpcFixtureServiceImpl
1717
from vgi_rpc.http import make_wsgi_app
1818
from vgi_rpc.rpc import RpcServer
1919

tests/serve_fixture_describe_unix.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import sys
1111

12-
from tests.test_rpc import RpcFixtureService, RpcFixtureServiceImpl
12+
from tests._fixture_service import RpcFixtureService, RpcFixtureServiceImpl
1313
from vgi_rpc.rpc import RpcServer, serve_unix
1414

1515

tests/serve_fixture_http.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
import waitress
1717

18-
from tests.test_rpc import RpcFixtureService, RpcFixtureServiceImpl
18+
from tests._fixture_service import RpcFixtureService, RpcFixtureServiceImpl
1919
from vgi_rpc.http import make_wsgi_app
2020
from vgi_rpc.rpc import RpcServer
2121

tests/serve_fixture_pipe.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
RPC requests over stdin/stdout.
1111
"""
1212

13-
from tests.test_rpc import RpcFixtureService, RpcFixtureServiceImpl
13+
from tests._fixture_service import RpcFixtureService, RpcFixtureServiceImpl
1414
from vgi_rpc.rpc import run_server
1515

1616

tests/serve_fixture_unix.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import sys
1313

14-
from tests.test_rpc import RpcFixtureService, RpcFixtureServiceImpl
14+
from tests._fixture_service import RpcFixtureService, RpcFixtureServiceImpl
1515
from vgi_rpc.rpc import RpcServer, serve_unix
1616

1717

tests/serve_fixture_unix_threaded.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import sys
1313

14-
from tests.test_rpc import RpcFixtureService, RpcFixtureServiceImpl
14+
from tests._fixture_service import RpcFixtureService, RpcFixtureServiceImpl
1515
from vgi_rpc.rpc import RpcServer, serve_unix
1616

1717

0 commit comments

Comments
 (0)