Looking for advice: supporting multiple embedded interpreters

Lutz Paelike lutz_p at gmx.net
Thu Jan 22 10:42:12 EST 2004


Paul is totally right. I am in the same situation here.
He described very clearly the problem.

Any insights anybody?

Lutz Paelike


Paul Miller wrote:
> Some background first - we have some software that embeds a Python 
> interpreter into a host application. Scripts are loaded dynamically and 
> used. But we want to support the ability to edit scripts while the app 
> is running. This means we have to "unload" the script and cause a 
> reload. Normal module reloading tricks don't work because if you try to 
> reimport a script that imports another script, and if the nested script 
> is changed, it might not be reloaded itself. Also, we have 2 parts of 
> the software, each using Python for its own set of scripts. We don't 
> want scripts loaded into each parts to "see" scripts loaded into the 
> other part. Ideally, we would like multiple "instances" of a Python 
> interpreter to manage this.
> 
> So, for Python 2.2, I came up with a system that works. When we need a 
> new self-contained Python interpreter, I use Py_NewInterpreter(), swap 
> it in using PyThreadState_Swap, load my built in modules, and swap it 
> back out. When I need to run some code in that interpreter, I swap it 
> back in, load the module I need, call methods in it, and swap it back 
> out. When I'm done with the interpreter, I swap it back in and call 
> Py_EndInterpreter.
> 
> When I want to force a reload of all the script code in a given 
> interpreter, I just delete the interpreter, create a new one, and load 
> the scripts into that one. This has worked flawlessly. And each "part" 
> of my application can use a different interpreter without modules and 
> globals in each one interfering with the other.
> 
> Now, with Python 2.3, this code doesn't seem to work anymore. Someone 
> told me it is likely because of the extensive rewrite of GUSI or 
> whatnot. It is important to note that I'm NOT really doing any 
> threading. I just was self-contained interpreters for the above reasons.
> 
> What I am wondering is if there a reliable method in 2.3 that does what 
> I need?
> 
> It has recently come to my attention that Lutz Paelike is in exactly the 
> same situation I am in, so I don't think this is a fringe concept.
> 
> ------




More information about the Python-list mailing list