Why does IDLE use a subprocess?
James Schaffler
jschaffler at proton.me
Wed May 31 22:08:56 EDT 2023
On Tuesday, May 30th, 2023 at 10:18 PM, Chris Angelico wrote:
> Yep, what you're seeing there is the namespace and nothing else. But
> if you mess with an actual builtin object, it'll be changed for the
> other interpreter too.
>
> > > > import ctypes
> > > > ctypes.cast(id(42), ctypes.POINTER(ctypes.c_int))[6] = 43
> > > > 41+1
>
> 43
>
> > > > from code import InteractiveInterpreter
> > > > interp = InteractiveInterpreter()
> > > > interp.runcode("print(41+1)")
>
> 43
>
> (Note that this only works in CPython and only with integers small
> enough to be in the cache, meaning that there is only one such object
> representing that integer.)
>
> The same is true of C extensions, which often have their own internal
> state, and that state isn't isolated to a single interpreter.
>
> Better isolation is coming with PEP 554
> https://peps.python.org/pep-0554/ which also has some great
> information about what currently is NOT isolated. (Also, even then,
> some things won't be fully isolated; I think that the ctypes trick
> above might still affect a subinterpreter even in a post-PEP554
> world.)
Amazing example! Thank you everyone for the detailed responses - will be sure to check out the PEP as well.
Jim
More information about the Python-list
mailing list