🌐
Python
peps.python.org › pep-0734
PEP 734 – Multiple Interpreters in the Stdlib | peps.python.org
November 6, 2023 - This includes Interpreter objects that represent the underlying interpreters. The module will also provide a basic Queue class for communication between interpreters. Finally, we will add a new concurrent.futures.InterpreterPoolExecutor based on the interpreters module.
🌐
Python
docs.python.org › 3 › library › concurrent.futures.html
concurrent.futures — Launching parallel tasks — Python 3.14 ...
January 30, 2026 - The InterpreterPoolExecutor class uses a pool of interpreters to execute calls asynchronously. It is a ThreadPoolExecutor subclass, which means each worker is running in its own thread.
Discussions

python - InterpreterPoolExecutor vs ProcessPoolExecutor - Stack Overflow
Python 3.14 introduced InterpreterPoolExecutor. How is it different from ProcessPoolExecutor? Here are the ways they are similar: Both can utilize multiple CPU cores Both use pickle to share obje... More on stackoverflow.com
🌐 stackoverflow.com
December 29, 2025
`InterpreterPoolExecutor`'s default thread name prefix is invalid
With this code, htop with "Show custom thread names" enabled) shows it's ThreadPoolExecutor instead of InterpreterPoolExecutor: More on github.com
🌐 github.com
4
July 9, 2025
Minor InterpreterPoolExecutor Issues
Bug report Bug description: __main__ handling isn't quite right non-pickleable-but-shareable objects fail common code with test.support.interpreters should be shared This has gh-132775 as a pre... More on github.com
🌐 github.com
5
May 6, 2025
InterpreterPoolExecutor raises NotShareableError for numpy array
Bug report Bug description: This would appear to be a regression, as ProcessPoolExecutor can work with numpy arrays. I would hazard it has something to do with the optimisations around sharing data types like bytes and str between interp... More on github.com
🌐 github.com
3
December 30, 2025
🌐
GitHub
github.com › python › cpython › issues › 136603
InterpreterPoolExecutor does not work as replacement of ThreadPoolExecutor. · Issue #136603 · python/cpython
July 13, 2025 - import concurrent.futures from concurrent.futures import InterpreterPoolExecutor, ThreadPoolExecutor def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) with InterpreterPoolExecutor(max_workers=5) as executor: futures = {executor.submit(fib, n): n for n in range(10)} for future in concurrent.futures.as_completed(futures): n = futures[future] data = future.result() print(f"fib({n}): {data}")
Author   corona10
🌐
Carlmastrangelo
carlmastrangelo.com › blog › interpreterpoolexecutor-we-need-pep-734
InterpreterPoolExecutor - We Need PEP 734 - Carl Mastrangelo
Python 3.14 adds a new module and APIs for creating sub-interpreters. (e.g. InterpreterPoolExecutor) Significant work has gone into CPython to make the Interpreter state a thread-local, meaning it’s possible to run multiple “Pythons” in the same process.
🌐
Stack Overflow
stackoverflow.com › questions › 79832203 › interpreterpoolexecutor-vs-processpoolexecutor
python - InterpreterPoolExecutor vs ProcessPoolExecutor - Stack Overflow
December 29, 2025 - Python 3.14 introduced InterpreterPoolExecutor. How is it different from ProcessPoolExecutor? Here are the ways they are similar: Both can utilize multiple CPU cores Both use pickle to share obje...
🌐
Medium
medium.com › @nomannayeem › python-3-14-personally-from-just-works-to-works-faster-safer-and-in-parallel-42331f2d7fc6
Python 3.14, Personally: From “Just Works” to “Works Faster, Safer, and In Parallel.” | by Nayeem Islam | Medium
July 25, 2025 - Multiple interpreters: concurrent.interpreters (plus InterpreterPoolExecutor) gives you “process-like isolation, thread-ish cost.” Prototype an actor-style worker or a CPU-bound pool.
🌐
GitHub
github.com › python › cpython › issues › 136470
`InterpreterPoolExecutor`'s default thread name prefix is invalid · Issue #136470 · python/cpython
July 9, 2025 - from concurrent.futures import InterpreterPoolExecutor def w(): import time time.sleep(100) executor1 = InterpreterPoolExecutor() executor1.submit(w) executor1.submit(w) executor2 = InterpreterPoolExecutor() executor2.submit(w) executor2.submit(w) executor1.shutdown() executor2.shutdown()
Author   aisk
🌐
Real Python
realpython.com › python314-new-features
Python 3.14: Cool New Features for You to Try – Real Python
August 28, 2025 - To make subinterpreters easy to use, the standard library now offers an InterpreterPoolExecutor in concurrent.futures. It works just like ThreadPoolExecutor or ProcessPoolExecutor. You submit callables, and you get back results.
Find elsewhere
🌐
GitHub
github.com › python › cpython › issues › 133485
Minor InterpreterPoolExecutor Issues · Issue #133485 · python/cpython
May 6, 2025 - gh-133485: Use interpreters.Interpreter in InterpreterPoolExecutor #133957 · [3.14] gh-133485: Use interpreters.Interpreter in InterpreterPoolExecutor (gh-133957) #135695 · Reactions are currently unavailable · ericsnowcurrently ·
Author   ericsnowcurrently
🌐
Pika Tech
blog.pika-tech.com › posts › real concurrency in python 3.14: interpreterpoolexecutor and beyond
Real Concurrency in Python 3.14: InterpreterPoolExecutor and Beyond | Pika Tech
September 29, 2025 - from concurrent.futures import InterpreterPoolExecutor def heavy_calc(n): total = 0 for i in range(n): total += (i * i) % 7 return total if __name__ == "__main__": tasks = [50_000_000, 60_000_000, 70_000_000, 80_000_000] with InterpreterPoolExecutor() as executor: futures = [ executor.submit(heavy_calc, size) for size in tasks ] results = [f.result() for f in futures] print(results)
🌐
GitHub
github.com › python › cpython › issues › 143280
InterpreterPoolExecutor raises NotShareableError for numpy array · Issue #143280 · python/cpython
December 30, 2025 - import numpy as np from operator import pos as identity # pickle-able "identity" function from concurrent.futures import InterpreterPoolExecutor, ProcessPoolExecutor arr = np.array(range(10)) with InterpreterPoolExecutor() as executor: result = executor.submit(identity, arr).result() # ^-- raises NotShareableError: args not shareable assert np.all(arr == result)
Author   Dunes
🌐
TechNetExperts
technetexperts.com › home › python interpreterpoolexecutor vs processpoolexecutor [solved]
Python InterpreterPoolExecutor vs ProcessPoolExecutor [Solved]
December 27, 2025 - Python 3.14's new InterpreterPoolExecutor offers a lightweight alternative to ProcessPoolExecutor by using sub-interpreters instead of separate processes. This results in faster startup times and reduced memory overhead for parallel CPU-bound tasks.
🌐
GitHub
github.com › python › cpython › issues › 136380
Inconsistent import behavior when concurrent.futures.InterpreterPoolExecutor not exist · Issue #136380 · python/cpython
July 7, 2025 - Bug report Bug description: When the _interpreters module which under the hood to implement InterpreterPoolExecutor does not exist, import concurrent.futures.InterpreterPoolExecutor will result Non...
Author   aisk
🌐
GitHub
github.com › python › cpython › issues › 126714
InterpreterPoolExecutor workers do not inherit modifications made to sys.path before starting. · Issue #126714 · python/cpython
November 12, 2024 - """ # Unlike all other executors, the InterpreterPoolExecutor does not # automatically inherit the parent process's sys.path. This is a # workaround to ensure that the worker has the same sys.path as the # parent process or tests will fail.
Author   TkTech
🌐
GitHub
github.com › python › cpython › pull › 124548
gh-124694: Add concurrent.futures.InterpreterPoolExecutor by ericsnowcurrently · Pull Request #124548 · python/cpython
This is an implementation of InterpreterPoolExecutor that builds on ThreadPoolExecutor. This assumes that we're okay adding the executor separately from PEP 734. That PEP is about adding a new...
Author   python
🌐
GitHub
github.com › python › cpython › issues › 125865
InterpreterPoolExecutor Raises Attribute Error on Lambdas · Issue #125865 · python/cpython
October 23, 2024 - from concurrent.futures.interpreter import InterpreterPoolExecutor with InterpreterPoolExecutor() as executor: future = executor.submit(lambda x: 10) result = future.result() print(result)
Published   Oct 23, 2024
🌐
GitHub
github.com › python › cpython › issues › 136659
InterpreterPoolExecutor Failure When `__name__ == '__main__'`: Idiom Not Used · Issue #136659 · python/cpython
July 14, 2025 - import concurrent.futures from concurrent.futures import InterpreterPoolExecutor, ThreadPoolExecutor def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) with InterpreterPoolExecutor(max_workers=5) as executor: futures = {executor.submit(fib, n): n for n in range(10)} for future in concurrent.futures.as_completed(futures): n = futures[future] data = future.result() print(f"fib({n}): {data}")
Author   ericsnowcurrently
🌐
Reddit
reddit.com › r/python › pep 734: multiple interpreters in the stdlib
r/Python on Reddit: PEP 734: Multiple Interpreters in the Stdlib
November 28, 2023 - This includes Interpreter objects that represent the underlying interpreters. The module will also provide a basic Queue class for communication between interpreters. Finally, we will add a new concurrent.futures.InterpreterPoolExecutor based on the interpreters module.
🌐
GitHub
github.com › python › cpython › issues › 124694
Add concurrent.futures.InterpreterPoolExecutor · Issue #124694 · python/cpython
September 27, 2024 - Feature or enhancement Proposal: While we wait on PEP 734, there's nothing blocking us from adding a new executor for multiple interpreters. Doing so would allow people to start trying them out. (I wish I had thought of this for 3.13!) M...
Author   ericsnowcurrently
🌐
Iscinumpy
iscinumpy.dev › home › python π
Python π - - ISciNumPy.dev
October 7, 2025 - import concurrent.futures import random import statistics def pi(trials: int) -> float: Ncirc = 0 for _ in range(trials): x = random.uniform(-1, 1) y = random.uniform(-1, 1) if x * x + y * y <= 1: Ncirc += 1 return 4.0 * (Ncirc / trials) def pi_in_threads(threads: int, trials: int) -> float: if threads == 0: return pi(trials) with InterpreterPoolExecutor(max_workers=threads) as executor: return statistics.mean(executor.map(pi, [trials // threads] * threads))