Я пытаюсь использовать pythonnet (библиотеку С#) из нескольких потоков, но он блокируется. Ниже приведена процедура вызова CPython из этой библиотеки:
Py_InitializeEx(0); // Initialize CPython
if (PyEval_ThreadsInitialized() == 0)
PyEval_InitThreads();
// ---------------------------
gs = PyGILState_Ensure();
// Execute some Python code here
PyGILState_Release(gs);
Однако при повторном запуске этого из другого потока (не основного потока) он блокируется:
gs = PyGILState_Ensure(); // Deadlocks!
// Execute some Python code here
PyGILState_Release(gs);
Как правильно вызывать CPython из нескольких потоков?
Следующий вопрос:
Встраивание Python в многопоточное приложение C
кажется, связано, но я не разбираюсь в том, что такое «правильный» подход?