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

时间:2019-01-13 16:19:47

标签: python c locking cpython

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

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

您能提供一些解决此问题的线索吗?

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

2 个答案:

答案 0 :(得分:0)

失败的代码是

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

在代码中搜索head_mutex引用finds

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

在失败的代码之前被调用。

因此,原因是PyThread_allocate_lock返回NULL。在Python代码库中,有几种不同的实现方式,具体取决于操作系统和构建标志,因此您需要对其进行调试或以其他方式弄清楚在您的情况下使用了哪种方法来进一步跟踪错误以进行操作系统调用。

答案 1 :(得分:0)

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