Я пытаюсь использовать pythonnet (библиотека C #) из нескольких потоков, но он заходит в тупик. Кажется, что процедура вызова 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
похоже связаноНо я не мудр в том, что такое «правильный» подход?