问题
motrix_env_core/tests/test_numba_manager.py 跑一次约 26~31s(28 个测试),其中绝大多数时间花在重复编译 Numba kernel 上。
根因
test_numba_manager.py:286-290 的 autouse fixture:
@pytest.fixture(autouse=True)
def _isolated_numba_cache(tmp_path, monkeypatch):
monkeypatch.setenv("NUMBA_CACHE_DIR", str(tmp_path / "numba-cache"))
compiler_module._KERNEL_CACHE.clear()
compiler_module._TERM_CACHE.clear()
它对所有测试生效:
- 每个测试前清空进程内
_KERNEL_CACHE / _TERM_CACHE,框架自带的同 plan 去重被完全绕过;
NUMBA_CACHE_DIR 指向每个测试独立的空 tmp 目录,磁盘缓存也无法命中。
结果:28 个测试每个都全额重编。日志确认同一 plan_key 在不同测试中各编译一次(每个 ~1.2s)。
证据
进程内缓存正常工作时(脚本直接连续构造同配置 env):
| 构造次序 |
init_state 耗时 |
| 第 1 个 env(含编译) |
1.52s |
| 第 2~4 个 env |
~0ms |
pytest 中因 autouse 清缓存,每个测试固定 1.2~1.5s:
1.53s call test_step_preserves_previous_observation_with_alternating_preallocated_buffers
1.48s call test_done_envs_reset_before_observation_and_preserve_transition_outputs
1.39s call test_command_term_updates_lifecycle_and_selected_reset_ids
...
28 passed in 30.76s # 冷跑
28 passed in 25.67s # 热跑,磁盘缓存同样无效
建议修复
把 _isolated_numba_cache 从 autouse=True 改为普通 fixture,仅由真正验证缓存行为的测试显式引用,例如:
test_materialize_source_is_safe_for_concurrent_same_plan_writers
test_build_rematerializes_source_after_cache_invalidation
test_specialization_cache_failure_rebuilds_callable_dispatchers_before_retry
test_reset_descriptor_is_part_of_numba_kernel_cache_key
其余测试共享进程内缓存,每个 distinct plan 只编译一次(文件内约 6~8 个 distinct plan),预计总耗时降至 ~8-10s,测试数量与覆盖不变。
语义上也更准确:绝大多数测试验证的是 env 行为契约,不需要冷缓存隔离。
问题
motrix_env_core/tests/test_numba_manager.py跑一次约 26~31s(28 个测试),其中绝大多数时间花在重复编译 Numba kernel 上。根因
test_numba_manager.py:286-290的 autouse fixture:它对所有测试生效:
_KERNEL_CACHE/_TERM_CACHE,框架自带的同 plan 去重被完全绕过;NUMBA_CACHE_DIR指向每个测试独立的空 tmp 目录,磁盘缓存也无法命中。结果:28 个测试每个都全额重编。日志确认同一
plan_key在不同测试中各编译一次(每个 ~1.2s)。证据
进程内缓存正常工作时(脚本直接连续构造同配置 env):
pytest 中因 autouse 清缓存,每个测试固定 1.2~1.5s:
建议修复
把
_isolated_numba_cache从autouse=True改为普通 fixture,仅由真正验证缓存行为的测试显式引用,例如:test_materialize_source_is_safe_for_concurrent_same_plan_writerstest_build_rematerializes_source_after_cache_invalidationtest_specialization_cache_failure_rebuilds_callable_dispatchers_before_retrytest_reset_descriptor_is_part_of_numba_kernel_cache_key其余测试共享进程内缓存,每个 distinct plan 只编译一次(文件内约 6~8 个 distinct plan),预计总耗时降至 ~8-10s,测试数量与覆盖不变。
语义上也更准确:绝大多数测试验证的是 env 行为契约,不需要冷缓存隔离。