[IronPython] Statefulness of CompiledCode

Greg Parker greg.parker at brovada.com
Mon May 26 17:54:04 CEST 2008


I am currently involved in a project that is using IronPython.  I am 
surprised by an issue that has popped up recently during testing.  To 
efficiently process data as it arrives we have compiled the python 
script into a CompiledCode object once at startup.  Every time we need 
to process incoming data we simply call execute on the CompiledCode 
instance after setting up some global attributes.  The problem is that 
the CompiledCode instance seems to be stateful.  Certain class 
variables, et cetera, are retaining their values from one call to 
execute to the next.  Is this desired behavior?  If so, how should I be 
handling this?  I did attempt to create a brand new PythonEngine 
instance to service each transaction, but this seemed to leak memory 
very badly, and eventually crashed the entire application.

Here is a condensed version of the python script to illustrate the 
problem.  I run this from a C# application which executes the 
CompiledCode ten times.  When the length of "fooListClassVariable" is 
printed, it increases to ten.  I would have expected to see one for 
every iteration.

----SomeInclude.py------------------------
class SomeClass:
    fooListClassVariable = [];
   
    def AddFoo(self):
        self.fooListClassVariable.append("foo")
        print str(len(self.fooListClassVariable))

----Program.py--------------------------
from SomeInclude import SomeClass

SomeClass().AddFoo()

---- C# Application---------------------
pyEngine = new PythonEngine();
String py = LoadMyScript("Program.py"));
compiledScript = pyEngine.Compile(py);

for (int i = 0; i < 10; i++) {
    compiledScript.Execute();
 }




More information about the Ironpython-users mailing list