Вызов CPython из нескольких потоков - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь использовать 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

похоже связаноНо я не мудр в том, что такое «правильный» подход?

...