我想从C ++创建一个Thread实例,target=entity
传递给构造函数,其中entity
是boost::python::object
,正如此Python代码所示:
pythread = Thread(target=entity)
我看到this SO post并提出了这段代码。它会在行object pythread = ...
上抛出未处理的异常。我怎么能这样做?
void start(boost::python::object entity){
using namespace boost::python;
object main_module = import("__main__");
object global = main_module.attr("__dict__");
exec("from threading import Thread", global, global);
dict kw;
kw["target"] = entity.attr("start");
object pythread = main_module.attr("Thread").attr("__init__"); //exception here
PyObject* c_retval = PyObject_Call(pythread.ptr(), NULL, kw.ptr());
object t = object(handle<>(c_retval));
t.attr("start")();
}
编辑:由于Python的Thread
对象被定义为Thread(group=None, target=None, ...)
,因此以下代码应该可以传递正确的参数:
object pythread = main_module.attr("Thread")(object(),entity.attr("start"));
但是,传递entity.attr("Start")
会导致错误(没有to_python转换器)。这是另一个SO帖子的问题。