致命的 Python 错误:从 c 调用 python 时无法初始化解释器的线程



我尝试从 c 调用 python 代码,该示例在我的环境 (python3.6) 上为示例代码运行正常,但是当我将其集成到我的程序中时,当我调用 Py_Initialize(); 时出现以下错误:

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

你能提供一些线索来解决这个问题吗?

错误似乎来自这里,但我仍然不确定如何避免这种情况。

失败的代码是

    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 代码库中有几种不同的实现,具体取决于操作系统和构建标志,因此您需要对其进行调试或以其他方式确定在您的情况下使用哪一个来进一步跟踪操作系统调用的错误。

我的程序中有一个名为sem_init的函数,它可能与系统库冲突,修改此函数的名称后程序运行正常(但仍然不确定原因)。

最新更新