Неустранимая ошибка Python: невозможно инициализировать потоки для интерпретатора при вызове Python из c - PullRequest
0 голосов
/ 13 января 2019

Я пытался вызвать код Python из c, пример работает нормально для примера кода в моей среде (python3.6), но когда я интегрировал его в свою программу, я получил следующую ошибку при вызове Py_Initialize();:

...
sem_init: Success
Fatal Python error: Can't initialize threads for interpreter

Не могли бы вы дать некоторые подсказки, чтобы решить эту проблему?

Кажется, ошибка происходит от здесь , но я все еще не уверен, как этого избежать.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

В моей программе есть функция с именем sem_init, которая может конфликтовать с системной библиотекой, программа работает нормально после того, как я изменю имя этой функции (но все еще не знаю причину).

0 голосов
/ 13 января 2019

Код ошибки:

    if (head_mutex == NULL)
        Py_FatalError("Can't initialize threads for interpreter");

Поиск кода для head_mutex ссылок поиск

#define HEAD_INIT() (void)(head_mutex || (head_mutex = PyThread_allocate_lock()))

, который вызывается прямо перед ошибочным кодом.

Итак, причина в том, что PyThread_allocate_lock возвращает NULL. Существует несколько различных реализаций для него в кодовой базе Python в зависимости от ОС и флагов сборки, поэтому вам необходимо отладить ее или иным образом выяснить, какая из них используется в вашем случае для отслеживания ошибки далее до вызова ОС.

...