인터프리터 풀 실행기

InterpreterPoolExecutor

각 작업자를 독립된 파이썬 인터프리터에서 실행합니다.

···
html
<div class="v"><header><b>INTERPRETER POOL</b><span id="state"></span></header><main><div class="pool" id="pool"></div><div class="transfer" id="transfer"></div></main><footer>parallel workers, isolated state</footer></div>
css
.v{width:min(92vw,660px);height:min(86vh,310px);box-sizing:border-box;padding:clamp(9px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:7px;color:var(--fg);font:500 clamp(15px,3.2vmin,17px)/1.25 var(--font-sans, sans-serif)}.v header,.v footer{display:flex;justify-content:space-between;align-items:center;gap:8px;white-space:nowrap}.v header b{color:var(--accent);font-size:.9em}.v header span,.v footer{color:var(--muted);font-size:.82em}.v main{flex:1;min-height:0;position:relative;overflow:hidden}.v .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.v .active{background:var(--accent)!important;color:var(--bg)!important;border-color:var(--accent)!important}.v .muted{opacity:.28} .pool{height:68%;display:flex;align-items:center;justify-content:space-around;gap:7px}.box{width:43%;height:65%;border:1px solid var(--line);border-radius:7px;display:grid;place-items:center;text-align:center;font:600 .82em ui-monospace,monospace}.box em{font-style:normal;color:var(--accent)}.transfer{text-align:center;color:var(--accent);font:600 .8em ui-monospace,monospace}
js
let n=0;function draw(){document.getElementById("pool").innerHTML=[0,1].map(i=>"<div class=\"box "+(i===n?"active":"")+"\">INTERP "+(i+1)+"<br>state "+(i?"B":"A")+"<br>job "+(n+i+1)+"</div>").join("");document.getElementById("transfer").textContent="separate state · explicit message";document.getElementById("state").textContent="worker "+(n+1);n=1-n}draw();setInterval(draw,1150)

Python 3.14의 InterpreterPoolExecutor는 작업자마다 별도 인터프리터를 둡니다. 각 인터프리터는 자신의 GIL과 런타임 상태를 가져 CPU 작업을 여러 코어에서 병렬 실행할 수 있습니다.

가변 객체를 인터프리터 사이에 그대로 공유할 수 없으므로 데이터 전달과 동기화 방식을 명시해야 합니다. 데모는 두 작업자의 상태 공간이 서로 분리된 모습을 보여줍니다.

언제 쓰나

스레드형 실행 인터페이스로 멀티코어 CPU 작업을 처리하고 상태 격리를 받아들일 때 씁니다.

페이지로 열기 ↗