[FATAL:partition_address_space.cc(243)] Check failed: !IsConfigurablePoolInitialized().
#16 0x7ffc1f173973 (D:\program\Python\Python313\python313.dll+0xa3973)
#17 0x7ffc1f1732d5 (D:\program\Python\Python313\python313.dll+0xa32d5)
#18 0x7ffc1f176139 (D:\program\Python\Python313\python313.dll+0xa6139)
#19 0x7ffc1f118ae9 (D:\program\Python\Python313\python313.dll+0x48ae9)
#20 0x7ffc1f1a69df (D:\program\Python\Python313\python313.dll+0xd69df)
#21 0x7ffc1f176401 (D:\program\Python\Python313\python313.dll+0xa6401)
#22 0x7ffc1f1740cc (D:\program\Python\Python313\python313.dll+0xa40cc)
#23 0x7ffc1f106455 (D:\program\Python\Python313\python313.dll+0x36455)
#24 0x7ffc1f1736e9 (D:\program\Python\Python313\python313.dll+0xa36e9)
#25 0x7ffc1f1732d5 (D:\program\Python\Python313\python313.dll+0xa32d5)
#26 0x7ffc1f178ca1 (D:\program\Python\Python313\python313.dll+0xa8ca1)
#27 0x7ffc1f1740cc (D:\program\Python\Python313\python313.dll+0xa40cc)
#28 0x7ffc1f192ab4 (D:\program\Python\Python313\python313.dll+0xc2ab4)
#29 0x7ffc1f1923a1 (D:\program\Python\Python313\python313.dll+0xc23a1)
#30 0x7ffc1f1922eb (D:\program\Python\Python313\python313.dll+0xc22eb)
#31 0x7ffc1f2022a0 (D:\program\Python\Python313\python313.dll+0x1322a0)
#13 0x7ffc68b631df (D:\program\Python\Python313\DLLs\_ctypes.pyd+0x31df)
#14 0x7ffc68b62e17 (D:\program\Python\Python313\DLLs\_ctypes.pyd+0x2e17)
#15 0x7ffc68b62a07 (D:\program\Python\Python313\DLLs\_ctypes.pyd+0x2a07)
#10 0x7ffc89444771 (D:\program\Python\Python313\DLLs\libffi-8.dll+0x4771)
#11 0x7ffc89444493 (D:\program\Python\Python313\DLLs\libffi-8.dll+0x4493)
#12 0x7ffc894442c2 (D:\program\Python\Python313\DLLs\libffi-8.dll+0x42c2)
#0 0x7ffbbfd8ad32 (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0x158ad32)
#1 0x7ffbbfcfe5a7 (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0x14fe5a7)
#2 0x7ffbbfc4827d (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0x144827d)
#3 0x7ffbbeb4e104 (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0x34e104)
#4 0x7ffbbeb4c2b8 (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0x34c2b8)
#5 0x7ffbbe85f113 (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0x5f113)
#6 0x7ffbbe80e9b3 (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0xe9b3)
#7 0x7ffbbe80ea8a (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0xea8a)
#8 0x7ffbbe806785 (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0x6785)
#9 0x7ffbbe80cf23 (D:\gitlab\quant-strategies\venv\Lib\site-packages\py_mini_racer\mini_racer.dll+0xcf23)
早上来执行策略脚本的时候,报了上面的错误,问了一下元宝,下面是它的回答。
这是一个典型的 V8 / PyMiniRacer 内存分区初始化冲突,不是 Python 代码逻辑错误,而是进程级别的二进制兼容性问题。
核心结论(先看这个)
这是 Python 3.13 与 PyMiniRacer(V8)不兼容导致的致命错误。
V8 试图重复初始化其内存分区(PartitionAlloc),被 Chromium 的断言直接杀死进程。
最推荐的解决方案:降级到 Python 3.11。
错误深度解析
- 关键错误信息
[FATAL:partition_address_space.cc(243)] Check failed: !IsConfigurablePoolInitialized().
这是 Chromium V8 引擎 内部的 PartitionAlloc(分区内存分配器)报错。 它的含义是:V8 的可配置内存池已经初始化过了,但代码又尝试再次初始化。
- 为什么发生在你这里?
从堆栈回溯可以清晰地看到调用链:
python313.dll └─ _ctypes.pyd └─ libffi-8.dll └─ mini_racer.dll (V8)
结合你的环境(Python 3.13 + py_mini_racer),原因通常有以下几点:
✅ 原因 A:Python 3.13 的重大变更(最可能)
Python 3.13 对内存分配器(obmalloc)、对象模型和 Windows CRT 进行了大幅重构。 V8 的内存管理器极度依赖特定的进程地址空间和启动顺序,Python 3.13 的行为破坏了 V8 的假设,导致它在错误的时机尝试初始化内存池。
✅ 原因 B:Windows 下的 DLL 加载冲突
py_mini_racer 包含了一个巨大的 mini_racer.dll。在 Windows 上,如果 Python 解释器先占用了某些虚拟地址空间,V8 就无法预留它所需的特定区域,从而触发此 FATAL 错误。
✅ 原因 C:隐式的多次初始化
如果在同一进程内: • 多次 import py_mini_racer
• 使用了 multiprocessing (Windows 默认 spawn 模式)
• 同时加载了其他含 V8 的库(如 Playwright, ChromeDriver, PyQt/PySide 的新版本等)
都会导致 V8 试图“二次启动”。
解决方案(按推荐程度排序)
🥇 方案一:降级 Python(强烈推荐)
这是目前唯一稳定的方案。py_mini_racer 的预编译二进制文件尚未跟上 Python 3.13 的节奏。
建议版本:Python 3.11.x
创建新环境
conda create -n quant311 python=3.11 conda activate quant311 pip install py-mini-racer
注:Quant/量化团队目前的主流生产环境均为 3.10 或 3.11。
🥈 方案二:改用 Subprocess 隔离 V8
如果不方便降级,把 JS 执行放到独立的子进程中,彻底避免内存污染。
main.py
import subprocess import sys
def run_js(code): # 通过子进程调用另一个专门执行JS的脚本 result = subprocess.run( [sys.executable, “js_worker.py”, code], capture_output=True, text=True ) return result.stdout
js_worker.py
import sys from py_mini_racer import MiniRacer
ctx = MiniRacer() print(ctx.eval(sys.argv[1]))
🥉 方案三:替换 JS 运行时
如果你的 JS 代码不涉及太复杂的 V8 特性,可以考虑更轻量的替代品:
• quickjs: 纯 C 实现,无内存分区问题,非常适合量化计算。 pip install quickjs
import quickjs
ctx = quickjs.Context()
ctx.eval("1+1")
⚠️ 方案四:调整 Import 位置(临时止血)
确保在 multiprocessing 的子进程中才导入: def worker(): from py_mini_racer import MiniRacer # 放在函数内部 ctx = MiniRacer() …
总结
现状 建议
Python 3.13 + PyMiniRacer ❌ 不兼容(会导致 FATAL Crash)
Python 3.11 + PyMiniRacer ✅ 稳定组合
需要频繁调用 JS ✅ 使用 Subprocess 隔离
轻量级 JS 运算 ✅ 迁移至 QuickJS
一句话总结:这不是 Bug,是 Feature(Python 3.13 的新内存模型撞上了 V8 的老假设)。请降级 Python 或隔离进程。
如果需要,我可以帮你检查当前环境中是否有其他库也在偷偷加载 V8(如 Playwright 等),或者帮你设计一个适合量化策略的 JS 执行架构。