0

Suppose we have the following code in IronPython:

def hello():
    print "Hello from Python"

We call function hello() in the following C# code:

    private static void GetPythonFunction()
    {
        ScriptRuntime scriptRuntime = IronPython.Hosting.Python.CreateRuntime();
        ScriptScope scope = scriptRuntime.ExecuteFile(@"Python\helloFunc.py");
        Action hello = scope.GetVariable<Action>("hello");
        hello();
        scriptRuntime.Shutdown();
        hello(); // after IronPython runtime was disposed
    }

Which gives us result:

Hello from Python
Hello from Python

Why the second call hello() works twice even though the runtime environment was disposed?

1 Answer 1

1

Shutdown doesn't actually terminate the runtime, it just runs some cleanup routines. Things might be in a strange state afterwards, though, so there's no guarantee anything will work.

Plus, hello probably (I don't recall the exact details of how the delegates are created) has references to the runtime and engine keeping everything from being GC's.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.