【发布时间】:2015-01-16 14:23:56
【问题描述】:
在 within C++ 中通过 Boost Python 调用 Python 方法后,有什么方法可以停止正在运行的 Python 解释器?
我想中断通话有两个原因:
- 如果超时期限已过(即脚本运行“过长”)。
- 如果另一个(并行运行的)Python 脚本失败。
我在网络上和 Boost 文档中的搜索没有出现任何结果,但另一方面,我有时很难在 Boost 文档中找到正确的段落...
我从StackOverflow question 得到的唯一“想法”。这个想法是向脚本发送信号,但由于解释器在我的 C++ 进程中运行,这可能不是一个可行的选择?!
我正在做以下事情:
const boost::filesystem::path pythonScriptPath = /* Path to the script I want to execute a function from. */
const std::string pythonFunctionName = /* Name of the Python function to call. */;
boost::python::object mainModule = boost::python::import("__main__");
boost::python::object mainNameSpace = mainModule.attr("__dict__");
boost::python::dict locals;
locals["moduleName"] = pythonScriptPath.stem().string();
locals["modulePath"] = pythonScriptPath.string();
std::stringstream importModuleStream;
importModuleStream
<< "import imp\n"
<< "newModule = imp.load_module(moduleName, open(modulePath), modulePath, ('py', 'U', imp.PY_SOURCE))\n";
boost::python::exec(importModuleStream.str().c_str(), mainNameSpace, locals);
auto pythonScript = locals["newModule"];
auto pythonFunction = pythonScript_.attr(pythonFunctionName .c_str());
pythonFunction(/* args */);
现在的问题是:
我可以在触发 pythonFunction() 后中断/中止它的执行吗? 如果我调用它的方式不可行,是否有另一种方法可以使用 Boost Python 调用 Python 函数,以便我可以中止调用?
我在 Linux 下运行(以防万一这启用了一些依赖于平台的解决方案,我会非常喜欢)。
【问题讨论】:
标签: python c++ linux boost boost-python