最简单的示例如下所示:
#include "pybind/common/Common.h"
using CppFunc = std::function< int (int) >;
PYBIND11_MODULE( test, m )
{
m.def("addFunc", [](const pybind11::function& f){
static std::vector<CppFunc> vec{};
vec.push_back(f.cast<CppFunc>());
});
}
然后在python中,我只想做这样的事情
import test
def myFunc(number):
return number+1
test.addFunc(myFunc)
有趣的是,这很好用。但是,如果我使用“pythonscript.py”运行脚本,它将运行到,然后永不终止。在交互式控制台中,相同的代码可以正常工作,直到您尝试关闭控制台:进程被卡住
<如何安全地将这个Python函数存储在C++容器中?
static std::vector<CppFunc> vec{}
存储对python对象(用户函数)的引用,这些对象由于静态存储而永远不会被释放,因此解释器无法终止为确保解释器终止,您可以在模块终止时调用清理函数:
有关更多详细信息,请参见文档:https://pybind11.readthedocs.io/en/stable/advanced/misc.html#module-destructors
相关问题 更多 >
编程相关推荐