From ec55f7baf910ee09ec3a4847acd5dd6a16c1e2ee Mon Sep 17 00:00:00 2001 From: ChenYaoGang Date: Mon, 11 Sep 2023 17:18:34 +0800 Subject: [PATCH] fix: `new PyDict()` or `new PyList()` will cause error for `python 3.11` runtime. --- OpenRPA.Script/Activities/InvokeCode.cs | 17 +++++++++++------ OpenRPA.Script/Activities/ScriptActivities.cs | 14 +++++++++++++- 2 files changed, 24 insertions(+), 7 deletions(-) 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);