Как разместить движок IronPython в отдельном домене приложений? - PullRequest
2 голосов
/ 01 декабря 2009

Я использую приведенный ниже код для выполнения сценария IronPython на отдельном "appDomain" из c #. (Я использовал этот подход для решения проблемы утечки памяти) Сценарии, которые занимают меньше времени (менее 3 минут), выполняются нормально.

Но если сценарий, который занимает больше времени (более 5 минут), выдает исключение, говорящее -> System.Runtime.Remoting.RemotingException: объект '/011b230e_2f28_4caa_8bbc_92fabb63b311/vhpajnwe48ogwedf6zwikqow_4.rem'

using System;
using Microsoft.Scripting;

namespace PythonHostSamle
{
  class Program
  {
    static void Main(string[] args)
    {
        AppDomain sandbox = AppDomain.CreateDomain("sandbox");
        var engine = IronPython.Hosting.Python.CreateEngine(sandbox);
        var searchPaths = engine.GetSearchPaths();
        searchPaths.Add(@"C:\Python25\Lib");
        searchPaths.Add(@"C:\RevitPythonShell");
        engine.SetSearchPaths(searchPaths);

        ScriptScope scope = engine.ExecuteFile("C:\Python25\Test.py")
        // Script takes morethan 5mins to execute(sleep in the script)

        ObjectHandle oh = scope.GetVariableHandle("GlobalVariableName")
        // System throws following exception              
        //System.Runtime.Remoting.RemotingException:
        // Object '/011b230e_2f28_4caa_8bbc_92fabb63b311/vhpajnwe48ogwedf6zwikqow_4.rem'

        Console.ReadKey();
    }
  }
}

1 Ответ

1 голос
/ 01 декабря 2009

Переопределение InitializeLifetimeServices и возврат нуля были бы нормальным подходом. Я сомневаюсь, что это возможно в вашем случае. Включение элемента <lifetime> в файл app.config является другим подходом.

...