将 Python + numpy 代码嵌入 C++ dll 回调中

6 投票
1 回答
2044 浏览
提问于 2025-04-17 03:00

我刚开始接触Python嵌入。

我想在一个C++的回调函数里(在一个dll里面)嵌入Python和Numpy的代码。

我遇到的问题是这样的。如果我有:

Py_Initialize();
// some python glue
// python invocation
Py_Finalize();

一切都运行得很好。

但是如果我有:

Py_Initialize();
_import_array(); //to initialize numpy C-API
// some python glue + numpy array object creation
// python invocation via PyObject_CallObject()
Py_Finalize();

在第二次调用到_import_array();的时候就崩溃了(这意味着第一次回调是可以工作的)。

如果我只进行一次Python和Numpy的初始化,然后在析构函数里进行清理(也就是说不是每次都初始化和清理),那么在离开回调的时候就会崩溃。

我猜这里的问题可能出在Numpy上,但我不知道该怎么解决。

1 个回答

2

确保你的 .dll 文件只被初始化 一次,无论代码实际被调用多少次。

这里有一个关于“C++ 中的单例模式在 DLL 中”的链接:

DLL 中的单例模式?

撰写回答