有没有办法在使用(Py.GIL())块时处理异常?
例如:
using System;
using Python.Runtime;
public class Test{
public static void Main(){
using(Py.GIL()){
try{
dynamic module = Py.Import("module");
dynamic result = module.function("argument");
Console.WriteLine(result);
}
catch(Excepiton ex){
// Handled Exception
}
}
}
}
我问这个问题因为,我调用C#函数使用(Py.GIL())块.它使用主线程等待完成的新线程执行.它适用于第一轮,但是对于下一轮,它停在使用块上,应用程序冻结而不显示任何异常.
我甚至试图阻止主线程等待执行,但所有工作线程执行仍然在第一轮之后停止在Py.GIL()的使用块.
对于线程执行我正在使用线程池.
Thread.Factory.StartNew(FunctionName);
最佳答案
这个问题是由于Python如何处理线程.
主线程必须初始化Python引擎和允许线程.
主线程必须初始化Python引擎和允许线程.
PythonEngine.Initialize();
PythonEngine.BeginAllowThreads();
在使用使用(Py.GIL())块的工作线程之前,在主线程上运行上面的代码.