Код: Выделить всё
Runtime.PythonDLL = @"C:\Users\micro\AppData\Local\Programs\Python\Python39\python39.dll";
PythonEngine.Initialize();
Py.GIL();
Код: Выделить всё
using (var scope = Py.CreateScope())
{
dynamic sys = Py.Import("sys");
sys.path.append(@"C:\Users\micro\source\repos\REFWebApp\REFWebApp.Server\Evaluation\STTs\");
var scriptCompiled = Py.Import(scriptname);
string[] message = filenames;
var result = scriptCompiled.InvokeMethod("transcribe_all", message.ToPython());
PyObject[] pylist = result.AsManagedObject(typeof(PyObject[])) as PyObject[];
List transcriptions = new List();
foreach (PyObject pyobject in pylist)
{
string transcript = (string)pyobject.AsManagedObject(typeof(string));
Console.WriteLine(transcript);
transcriptions.Add(transcript);
}
Console.WriteLine(transcriptions);
return transcriptions;
}
Проблема возникает, когда приложение запускается после предположительного завершения выполнения этого класса. Если я позволю ему поработать 10-15 минут после завершения этого блока, я получу ошибку
Код: Выделить всё
System.InvalidOperationException: GIL must always be released, and it must be released from the same thread that acquired it.
at Python.Runtime.Py+GILState()+Finalize()
Я попробовал переместить все в другой блок используется (var gil = Py.GIL()){}, я пробовал gil.Dispose(), я пытался создать деструктор для класса, который включал бы оба gil.Dispose( ) и PythonEngine.Shutdown(), а также я попробовал добавить PythonEngine.BeginAllowThreads() на первом этапе выше. Я не уверен, что правильно понимаю, где выдается ошибка и что именно ее вызывает. Ничего из того, что я пробовал до сих пор, не помогло, поэтому мне бы очень хотелось, чтобы вам помогли!
Подробнее здесь: https://stackoverflow.com/questions/783 ... pts-from-c