diff --git a/OpenRPA.Script/Activities/InvokeCode.cs b/OpenRPA.Script/Activities/InvokeCode.cs index 57ac039b..66bf43aa 100644 --- a/OpenRPA.Script/Activities/InvokeCode.cs +++ b/OpenRPA.Script/Activities/InvokeCode.cs @@ -98,6 +98,16 @@ protected override void Execute(CodeActivityContext context) Execute(context, code, language, Arguments, PipelineOutput); } + public static void InitPython() + { + if (python_doinit) + { + Python.Runtime.PythonEngine.Initialize(); + _ = Python.Runtime.PythonEngine.BeginAllowThreads(); + python_doinit = false; + } + } + public void Execute(CodeActivityContext context, string code, string language, Dictionary Arguments, OutArgument> PipelineOutput) { @@ -365,12 +375,7 @@ public void Execute(CodeActivityContext context, string code, string language, D IntPtr lck = IntPtr.Zero; try { - if (python_doinit) - { - Python.Runtime.PythonEngine.Initialize(); - _ = Python.Runtime.PythonEngine.BeginAllowThreads(); - python_doinit = false; - } + InitPython(); // lck = PythonEngine.AcquireLock(); doRelease = true; using (Python.Runtime.Py.GIL()) diff --git a/OpenRPA.Script/Activities/ScriptActivities.cs b/OpenRPA.Script/Activities/ScriptActivities.cs index d99fe490..ba84bdd8 100644 --- a/OpenRPA.Script/Activities/ScriptActivities.cs +++ b/OpenRPA.Script/Activities/ScriptActivities.cs @@ -527,7 +527,19 @@ protected override void Execute(CodeActivityContext context) if (language == "Python") { - args = ToPythonObject(args); + try + { + InvokeCode.InitPython(); + using (Python.Runtime.Py.GIL()) + { + args = ToPythonObject(args); + } + } + catch (Exception ex) + { + Log.Warning(ex.ToString()); + throw new Exception("Failed for 'ToPythonObject': " + ex.ToString()); + } } rpa_args.Set(context, args);